//===----------------------------------------------------------------------===//
//
// This source file is part of the Soto for AWS open source project
//
// Copyright (c) 2017-2024 the Soto project authors
// Licensed under Apache License v2.0
//
// See LICENSE.txt for license information
// See CONTRIBUTORS.txt for the list of Soto project authors
//
// SPDX-License-Identifier: Apache-2.0
//
//===----------------------------------------------------------------------===//

// THIS FILE IS AUTOMATICALLY GENERATED by https://github.com/soto-project/soto-codegenerator.
// DO NOT EDIT.

#if canImport(FoundationEssentials)
import FoundationEssentials
#else
import Foundation
#endif
@_exported import SotoCore

/// Service object for interacting with AWS SESv2 service.
///
/// Amazon SES API v2  Amazon SES is an Amazon Web Services service that you can use to send email messages to your customers. If you're new to Amazon SES API v2, you might find it helpful to review the Amazon Simple Email Service Developer Guide. The Amazon SES Developer Guide provides information and code samples that demonstrate how to use Amazon SES API v2 features programmatically.
public struct SESv2: AWSService {
    // MARK: Member variables

    /// Client used for communication with AWS
    public let client: AWSClient
    /// Service configuration
    public let config: AWSServiceConfig

    // MARK: Initialization

    /// Initialize the SESv2 client
    /// - parameters:
    ///     - client: AWSClient used to process requests
    ///     - region: Region of server you want to communicate with. This will override the partition parameter.
    ///     - partition: AWS partition where service resides, standard (.aws), china (.awscn), government (.awsusgov).
    ///     - endpoint: Custom endpoint URL to use instead of standard AWS servers
    ///     - middleware: Middleware chain used to edit requests before they are sent and responses before they are decoded 
    ///     - timeout: Timeout value for HTTP requests
    ///     - byteBufferAllocator: Allocator for ByteBuffers
    ///     - options: Service options
    public init(
        client: AWSClient,
        region: SotoCore.Region? = nil,
        partition: AWSPartition = .aws,
        endpoint: String? = nil,
        middleware: AWSMiddlewareProtocol? = nil,
        timeout: TimeAmount? = nil,
        byteBufferAllocator: ByteBufferAllocator = ByteBufferAllocator(),
        options: AWSServiceConfig.Options = []
    ) {
        self.client = client
        self.config = AWSServiceConfig(
            region: region,
            partition: region?.partition ?? partition,
            serviceName: "SESv2",
            serviceIdentifier: "email",
            signingName: "ses",
            serviceProtocol: .restjson,
            apiVersion: "2019-09-27",
            endpoint: endpoint,
            variantEndpoints: Self.variantEndpoints,
            errorType: SESv2ErrorType.self,
            middleware: middleware,
            timeout: timeout,
            byteBufferAllocator: byteBufferAllocator,
            options: options
        )
    }




    /// FIPS and dualstack endpoints
    static var variantEndpoints: [EndpointVariantType: AWSServiceConfig.EndpointVariant] {[
        [.fips]: .init(endpoints: [
            "ca-central-1": "email-fips.ca-central-1.amazonaws.com",
            "us-east-1": "email-fips.us-east-1.amazonaws.com",
            "us-east-2": "email-fips.us-east-2.amazonaws.com",
            "us-gov-east-1": "email-fips.us-gov-east-1.amazonaws.com",
            "us-gov-west-1": "email-fips.us-gov-west-1.amazonaws.com",
            "us-west-1": "email-fips.us-west-1.amazonaws.com",
            "us-west-2": "email-fips.us-west-2.amazonaws.com"
        ])
    ]}

    // MARK: API Calls

    /// Retrieves batches of metric data collected based on your sending activity. You can execute this operation no more than 16 times per second, and with at most 160 queries from the batches per second (cumulative).
    @Sendable
    @inlinable
    public func batchGetMetricData(_ input: BatchGetMetricDataRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> BatchGetMetricDataResponse {
        try await self.client.execute(
            operation: "BatchGetMetricData", 
            path: "/v2/email/metrics/batch", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves batches of metric data collected based on your sending activity. You can execute this operation no more than 16 times per second, and with at most 160 queries from the batches per second (cumulative).
    ///
    /// Parameters:
    ///   - queries: A list of queries for metrics to be retrieved.
    ///   - logger: Logger use during operation
    @inlinable
    public func batchGetMetricData(
        queries: [BatchGetMetricDataQuery],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> BatchGetMetricDataResponse {
        let input = BatchGetMetricDataRequest(
            queries: queries
        )
        return try await self.batchGetMetricData(input, logger: logger)
    }

    /// Cancels an export job.
    @Sendable
    @inlinable
    public func cancelExportJob(_ input: CancelExportJobRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CancelExportJobResponse {
        try await self.client.execute(
            operation: "CancelExportJob", 
            path: "/v2/email/export-jobs/{JobId}/cancel", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Cancels an export job.
    ///
    /// Parameters:
    ///   - jobId: The export job ID.
    ///   - logger: Logger use during operation
    @inlinable
    public func cancelExportJob(
        jobId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CancelExportJobResponse {
        let input = CancelExportJobRequest(
            jobId: jobId
        )
        return try await self.cancelExportJob(input, logger: logger)
    }

    /// Create a configuration set. Configuration sets are groups of rules that you can apply to the emails that you send. You apply a configuration set to an email by specifying the name of the configuration set when you call the Amazon SES API v2. When you apply a configuration set to an email, all of the rules in that configuration set are applied to the email.
    @Sendable
    @inlinable
    public func createConfigurationSet(_ input: CreateConfigurationSetRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateConfigurationSetResponse {
        try await self.client.execute(
            operation: "CreateConfigurationSet", 
            path: "/v2/email/configuration-sets", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Create a configuration set. Configuration sets are groups of rules that you can apply to the emails that you send. You apply a configuration set to an email by specifying the name of the configuration set when you call the Amazon SES API v2. When you apply a configuration set to an email, all of the rules in that configuration set are applied to the email.
    ///
    /// Parameters:
    ///   - archivingOptions: An object that defines the MailManager archiving options for emails that you send using the configuration set.
    ///   - configurationSetName: The name of the configuration set. The name can contain up to 64 alphanumeric characters, including letters, numbers, hyphens (-) and underscores (_) only.
    ///   - deliveryOptions: An object that defines the dedicated IP pool that is used to send emails that you send using the configuration set.
    ///   - reputationOptions: An object that defines whether or not Amazon SES collects reputation metrics for the emails that you send that use the configuration set.
    ///   - sendingOptions: An object that defines whether or not Amazon SES can send email that you send using the configuration set.
    ///   - suppressionOptions: 
    ///   - tags: An array of objects that define the tags (keys and values) to associate with the configuration set.
    ///   - trackingOptions: An object that defines the open and click tracking options for emails that you send using the configuration set.
    ///   - vdmOptions: An object that defines the VDM options for emails that you send using the configuration set.
    ///   - logger: Logger use during operation
    @inlinable
    public func createConfigurationSet(
        archivingOptions: ArchivingOptions? = nil,
        configurationSetName: String,
        deliveryOptions: DeliveryOptions? = nil,
        reputationOptions: ReputationOptions? = nil,
        sendingOptions: SendingOptions? = nil,
        suppressionOptions: SuppressionOptions? = nil,
        tags: [Tag]? = nil,
        trackingOptions: TrackingOptions? = nil,
        vdmOptions: VdmOptions? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateConfigurationSetResponse {
        let input = CreateConfigurationSetRequest(
            archivingOptions: archivingOptions, 
            configurationSetName: configurationSetName, 
            deliveryOptions: deliveryOptions, 
            reputationOptions: reputationOptions, 
            sendingOptions: sendingOptions, 
            suppressionOptions: suppressionOptions, 
            tags: tags, 
            trackingOptions: trackingOptions, 
            vdmOptions: vdmOptions
        )
        return try await self.createConfigurationSet(input, logger: logger)
    }

    /// Create an event destination. Events include message sends, deliveries, opens, clicks, bounces, and complaints. Event destinations are places that you can send information about these events to. For example, you can send event data to Amazon EventBridge and associate a rule to send the event to the specified target. A single configuration set can include more than one event destination.
    @Sendable
    @inlinable
    public func createConfigurationSetEventDestination(_ input: CreateConfigurationSetEventDestinationRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateConfigurationSetEventDestinationResponse {
        try await self.client.execute(
            operation: "CreateConfigurationSetEventDestination", 
            path: "/v2/email/configuration-sets/{ConfigurationSetName}/event-destinations", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Create an event destination. Events include message sends, deliveries, opens, clicks, bounces, and complaints. Event destinations are places that you can send information about these events to. For example, you can send event data to Amazon EventBridge and associate a rule to send the event to the specified target. A single configuration set can include more than one event destination.
    ///
    /// Parameters:
    ///   - configurationSetName: The name of the configuration set .
    ///   - eventDestination: An object that defines the event destination.
    ///   - eventDestinationName: A name that identifies the event destination within the configuration set.
    ///   - logger: Logger use during operation
    @inlinable
    public func createConfigurationSetEventDestination(
        configurationSetName: String,
        eventDestination: EventDestinationDefinition,
        eventDestinationName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateConfigurationSetEventDestinationResponse {
        let input = CreateConfigurationSetEventDestinationRequest(
            configurationSetName: configurationSetName, 
            eventDestination: eventDestination, 
            eventDestinationName: eventDestinationName
        )
        return try await self.createConfigurationSetEventDestination(input, logger: logger)
    }

    /// Creates a contact, which is an end-user who is receiving the email, and adds them to a contact list.
    @Sendable
    @inlinable
    public func createContact(_ input: CreateContactRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateContactResponse {
        try await self.client.execute(
            operation: "CreateContact", 
            path: "/v2/email/contact-lists/{ContactListName}/contacts", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a contact, which is an end-user who is receiving the email, and adds them to a contact list.
    ///
    /// Parameters:
    ///   - attributesData: The attribute data attached to a contact.
    ///   - contactListName: The name of the contact list to which the contact should be added.
    ///   - emailAddress: The contact's email address.
    ///   - topicPreferences: The contact's preferences for being opted-in to or opted-out of topics.
    ///   - unsubscribeAll: A boolean value status noting if the contact is unsubscribed from all contact list topics.
    ///   - logger: Logger use during operation
    @inlinable
    public func createContact(
        attributesData: String? = nil,
        contactListName: String,
        emailAddress: String,
        topicPreferences: [TopicPreference]? = nil,
        unsubscribeAll: Bool? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateContactResponse {
        let input = CreateContactRequest(
            attributesData: attributesData, 
            contactListName: contactListName, 
            emailAddress: emailAddress, 
            topicPreferences: topicPreferences, 
            unsubscribeAll: unsubscribeAll
        )
        return try await self.createContact(input, logger: logger)
    }

    /// Creates a contact list.
    @Sendable
    @inlinable
    public func createContactList(_ input: CreateContactListRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateContactListResponse {
        try await self.client.execute(
            operation: "CreateContactList", 
            path: "/v2/email/contact-lists", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a contact list.
    ///
    /// Parameters:
    ///   - contactListName: The name of the contact list.
    ///   - description: A description of what the contact list is about.
    ///   - tags: The tags associated with a contact list.
    ///   - topics: An interest group, theme, or label within a list. A contact list can have multiple topics.
    ///   - logger: Logger use during operation
    @inlinable
    public func createContactList(
        contactListName: String,
        description: String? = nil,
        tags: [Tag]? = nil,
        topics: [Topic]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateContactListResponse {
        let input = CreateContactListRequest(
            contactListName: contactListName, 
            description: description, 
            tags: tags, 
            topics: topics
        )
        return try await self.createContactList(input, logger: logger)
    }

    /// Creates a new custom verification email template. For more information about custom verification email templates, see Using custom verification email templates in the Amazon SES Developer Guide. You can execute this operation no more than once per second.
    @Sendable
    @inlinable
    public func createCustomVerificationEmailTemplate(_ input: CreateCustomVerificationEmailTemplateRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateCustomVerificationEmailTemplateResponse {
        try await self.client.execute(
            operation: "CreateCustomVerificationEmailTemplate", 
            path: "/v2/email/custom-verification-email-templates", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a new custom verification email template. For more information about custom verification email templates, see Using custom verification email templates in the Amazon SES Developer Guide. You can execute this operation no more than once per second.
    ///
    /// Parameters:
    ///   - failureRedirectionURL: The URL that the recipient of the verification email is sent to if his or her address is not successfully verified.
    ///   - fromEmailAddress: The email address that the custom verification email is sent from.
    ///   - successRedirectionURL: The URL that the recipient of the verification email is sent to if his or her address is successfully verified.
    ///   - templateContent: The content of the custom verification email. The total size of the email must be less than 10 MB. The message body may contain HTML, with some limitations. For more information, see Custom verification email frequently asked questions in the Amazon SES Developer Guide.
    ///   - templateName: The name of the custom verification email template.
    ///   - templateSubject: The subject line of the custom verification email.
    ///   - logger: Logger use during operation
    @inlinable
    public func createCustomVerificationEmailTemplate(
        failureRedirectionURL: String,
        fromEmailAddress: String,
        successRedirectionURL: String,
        templateContent: String,
        templateName: String,
        templateSubject: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateCustomVerificationEmailTemplateResponse {
        let input = CreateCustomVerificationEmailTemplateRequest(
            failureRedirectionURL: failureRedirectionURL, 
            fromEmailAddress: fromEmailAddress, 
            successRedirectionURL: successRedirectionURL, 
            templateContent: templateContent, 
            templateName: templateName, 
            templateSubject: templateSubject
        )
        return try await self.createCustomVerificationEmailTemplate(input, logger: logger)
    }

    /// Create a new pool of dedicated IP addresses. A pool can include one or more dedicated IP addresses that are associated with your Amazon Web Services account. You can associate a pool with a configuration set. When you send an email that uses that configuration set, the message is sent from one of the addresses in the associated pool.
    @Sendable
    @inlinable
    public func createDedicatedIpPool(_ input: CreateDedicatedIpPoolRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateDedicatedIpPoolResponse {
        try await self.client.execute(
            operation: "CreateDedicatedIpPool", 
            path: "/v2/email/dedicated-ip-pools", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Create a new pool of dedicated IP addresses. A pool can include one or more dedicated IP addresses that are associated with your Amazon Web Services account. You can associate a pool with a configuration set. When you send an email that uses that configuration set, the message is sent from one of the addresses in the associated pool.
    ///
    /// Parameters:
    ///   - poolName: The name of the dedicated IP pool.
    ///   - scalingMode: The type of scaling mode.
    ///   - tags: An object that defines the tags (keys and values) that you want to associate with the pool.
    ///   - logger: Logger use during operation
    @inlinable
    public func createDedicatedIpPool(
        poolName: String,
        scalingMode: ScalingMode? = nil,
        tags: [Tag]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateDedicatedIpPoolResponse {
        let input = CreateDedicatedIpPoolRequest(
            poolName: poolName, 
            scalingMode: scalingMode, 
            tags: tags
        )
        return try await self.createDedicatedIpPool(input, logger: logger)
    }

    /// Create a new predictive inbox placement test. Predictive inbox placement tests can help you predict how your messages will be handled by various email providers around the world. When you perform a predictive inbox placement test, you provide a sample message that contains the content that you plan to send to your customers. Amazon SES then sends that message to special email addresses spread across several major email providers. After about 24 hours, the test is complete, and you can use the GetDeliverabilityTestReport operation to view the results of the test.
    @Sendable
    @inlinable
    public func createDeliverabilityTestReport(_ input: CreateDeliverabilityTestReportRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateDeliverabilityTestReportResponse {
        try await self.client.execute(
            operation: "CreateDeliverabilityTestReport", 
            path: "/v2/email/deliverability-dashboard/test", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Create a new predictive inbox placement test. Predictive inbox placement tests can help you predict how your messages will be handled by various email providers around the world. When you perform a predictive inbox placement test, you provide a sample message that contains the content that you plan to send to your customers. Amazon SES then sends that message to special email addresses spread across several major email providers. After about 24 hours, the test is complete, and you can use the GetDeliverabilityTestReport operation to view the results of the test.
    ///
    /// Parameters:
    ///   - content: The HTML body of the message that you sent when you performed the predictive inbox placement test.
    ///   - fromEmailAddress: The email address that the predictive inbox placement test email was sent from.
    ///   - reportName: A unique name that helps you to identify the predictive inbox placement test when you retrieve the results.
    ///   - tags: An array of objects that define the tags (keys and values) that you want to associate with the predictive inbox placement test.
    ///   - logger: Logger use during operation
    @inlinable
    public func createDeliverabilityTestReport(
        content: EmailContent,
        fromEmailAddress: String,
        reportName: String? = nil,
        tags: [Tag]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateDeliverabilityTestReportResponse {
        let input = CreateDeliverabilityTestReportRequest(
            content: content, 
            fromEmailAddress: fromEmailAddress, 
            reportName: reportName, 
            tags: tags
        )
        return try await self.createDeliverabilityTestReport(input, logger: logger)
    }

    /// Starts the process of verifying an email identity. An identity is an email address or domain that you use when you send email. Before you can use an identity to send email, you first have to verify it. By verifying an identity, you demonstrate that you're the owner of the identity, and that you've given Amazon SES API v2 permission to send email from the identity. When you verify an email address, Amazon SES sends an email to the address. Your email address is verified as soon as you follow the link in the verification email.   When you verify a domain without specifying the DkimSigningAttributes object, this operation provides a set of DKIM tokens. You can convert these tokens into CNAME records, which you then add to the DNS configuration for your domain. Your domain is verified when Amazon SES detects these records in the DNS configuration for your domain. This verification method is known as Easy DKIM. Alternatively, you can perform the verification process by providing your own public-private key pair. This verification method is known as Bring Your Own DKIM (BYODKIM). To use BYODKIM, your call to the CreateEmailIdentity operation has to include the DkimSigningAttributes object. When you specify this object, you provide a selector (a component of the DNS record name that identifies the public key to use for DKIM authentication) and a private key. When you verify a domain, this operation provides a set of DKIM tokens, which you can convert into CNAME tokens. You add these CNAME tokens to the DNS configuration for your domain. Your domain is verified when Amazon SES detects these records in the DNS configuration for your domain. For some DNS providers, it can take 72 hours or more to complete the domain verification process. Additionally, you can associate an existing configuration set with the email identity that you're verifying.
    @Sendable
    @inlinable
    public func createEmailIdentity(_ input: CreateEmailIdentityRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateEmailIdentityResponse {
        try await self.client.execute(
            operation: "CreateEmailIdentity", 
            path: "/v2/email/identities", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Starts the process of verifying an email identity. An identity is an email address or domain that you use when you send email. Before you can use an identity to send email, you first have to verify it. By verifying an identity, you demonstrate that you're the owner of the identity, and that you've given Amazon SES API v2 permission to send email from the identity. When you verify an email address, Amazon SES sends an email to the address. Your email address is verified as soon as you follow the link in the verification email.   When you verify a domain without specifying the DkimSigningAttributes object, this operation provides a set of DKIM tokens. You can convert these tokens into CNAME records, which you then add to the DNS configuration for your domain. Your domain is verified when Amazon SES detects these records in the DNS configuration for your domain. This verification method is known as Easy DKIM. Alternatively, you can perform the verification process by providing your own public-private key pair. This verification method is known as Bring Your Own DKIM (BYODKIM). To use BYODKIM, your call to the CreateEmailIdentity operation has to include the DkimSigningAttributes object. When you specify this object, you provide a selector (a component of the DNS record name that identifies the public key to use for DKIM authentication) and a private key. When you verify a domain, this operation provides a set of DKIM tokens, which you can convert into CNAME tokens. You add these CNAME tokens to the DNS configuration for your domain. Your domain is verified when Amazon SES detects these records in the DNS configuration for your domain. For some DNS providers, it can take 72 hours or more to complete the domain verification process. Additionally, you can associate an existing configuration set with the email identity that you're verifying.
    ///
    /// Parameters:
    ///   - configurationSetName: The configuration set to use by default when sending from this identity. Note that any configuration set defined in the email sending request takes precedence.
    ///   - dkimSigningAttributes: If your request includes this object, Amazon SES configures the identity to use Bring Your Own DKIM (BYODKIM) for DKIM authentication purposes, or, configures the key length to be used for Easy DKIM. You can only specify this object if the email identity is a domain, as opposed to an address.
    ///   - emailIdentity: The email address or domain to verify.
    ///   - tags: An array of objects that define the tags (keys and values) to associate with the email identity.
    ///   - logger: Logger use during operation
    @inlinable
    public func createEmailIdentity(
        configurationSetName: String? = nil,
        dkimSigningAttributes: DkimSigningAttributes? = nil,
        emailIdentity: String,
        tags: [Tag]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateEmailIdentityResponse {
        let input = CreateEmailIdentityRequest(
            configurationSetName: configurationSetName, 
            dkimSigningAttributes: dkimSigningAttributes, 
            emailIdentity: emailIdentity, 
            tags: tags
        )
        return try await self.createEmailIdentity(input, logger: logger)
    }

    /// Creates the specified sending authorization policy for the given identity (an email address or a domain).  This API is for the identity owner only. If you have not verified the identity, this API will return an error.  Sending authorization is a feature that enables an identity owner to authorize other senders to use its identities. For information about using sending authorization, see the Amazon SES Developer Guide. You can execute this operation no more than once per second.
    @Sendable
    @inlinable
    public func createEmailIdentityPolicy(_ input: CreateEmailIdentityPolicyRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateEmailIdentityPolicyResponse {
        try await self.client.execute(
            operation: "CreateEmailIdentityPolicy", 
            path: "/v2/email/identities/{EmailIdentity}/policies/{PolicyName}", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates the specified sending authorization policy for the given identity (an email address or a domain).  This API is for the identity owner only. If you have not verified the identity, this API will return an error.  Sending authorization is a feature that enables an identity owner to authorize other senders to use its identities. For information about using sending authorization, see the Amazon SES Developer Guide. You can execute this operation no more than once per second.
    ///
    /// Parameters:
    ///   - emailIdentity: The email identity.
    ///   - policy: The text of the policy in JSON format. The policy cannot exceed 4 KB. For information about the syntax of sending authorization policies, see the Amazon SES Developer Guide.
    ///   - policyName: The name of the policy. The policy name cannot exceed 64 characters and can only include alphanumeric characters, dashes, and underscores.
    ///   - logger: Logger use during operation
    @inlinable
    public func createEmailIdentityPolicy(
        emailIdentity: String,
        policy: String,
        policyName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateEmailIdentityPolicyResponse {
        let input = CreateEmailIdentityPolicyRequest(
            emailIdentity: emailIdentity, 
            policy: policy, 
            policyName: policyName
        )
        return try await self.createEmailIdentityPolicy(input, logger: logger)
    }

    /// Creates an email template. Email templates enable you to send personalized email to one or more destinations in a single API operation. For more information, see the Amazon SES Developer Guide. You can execute this operation no more than once per second.
    @Sendable
    @inlinable
    public func createEmailTemplate(_ input: CreateEmailTemplateRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateEmailTemplateResponse {
        try await self.client.execute(
            operation: "CreateEmailTemplate", 
            path: "/v2/email/templates", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates an email template. Email templates enable you to send personalized email to one or more destinations in a single API operation. For more information, see the Amazon SES Developer Guide. You can execute this operation no more than once per second.
    ///
    /// Parameters:
    ///   - templateContent: The content of the email template, composed of a subject line, an HTML part, and a text-only part.
    ///   - templateName: The name of the template.
    ///   - logger: Logger use during operation
    @inlinable
    public func createEmailTemplate(
        templateContent: EmailTemplateContent,
        templateName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateEmailTemplateResponse {
        let input = CreateEmailTemplateRequest(
            templateContent: templateContent, 
            templateName: templateName
        )
        return try await self.createEmailTemplate(input, logger: logger)
    }

    /// Creates an export job for a data source and destination. You can execute this operation no more than once per second.
    @Sendable
    @inlinable
    public func createExportJob(_ input: CreateExportJobRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateExportJobResponse {
        try await self.client.execute(
            operation: "CreateExportJob", 
            path: "/v2/email/export-jobs", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates an export job for a data source and destination. You can execute this operation no more than once per second.
    ///
    /// Parameters:
    ///   - exportDataSource: The data source for the export job.
    ///   - exportDestination: The destination for the export job.
    ///   - logger: Logger use during operation
    @inlinable
    public func createExportJob(
        exportDataSource: ExportDataSource,
        exportDestination: ExportDestination,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateExportJobResponse {
        let input = CreateExportJobRequest(
            exportDataSource: exportDataSource, 
            exportDestination: exportDestination
        )
        return try await self.createExportJob(input, logger: logger)
    }

    /// Creates an import job for a data destination.
    @Sendable
    @inlinable
    public func createImportJob(_ input: CreateImportJobRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateImportJobResponse {
        try await self.client.execute(
            operation: "CreateImportJob", 
            path: "/v2/email/import-jobs", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates an import job for a data destination.
    ///
    /// Parameters:
    ///   - importDataSource: The data source for the import job.
    ///   - importDestination: The destination for the import job.
    ///   - logger: Logger use during operation
    @inlinable
    public func createImportJob(
        importDataSource: ImportDataSource,
        importDestination: ImportDestination,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateImportJobResponse {
        let input = CreateImportJobRequest(
            importDataSource: importDataSource, 
            importDestination: importDestination
        )
        return try await self.createImportJob(input, logger: logger)
    }

    /// Creates a multi-region endpoint (global-endpoint). The primary region is going to be the AWS-Region where the operation is executed. The secondary region has to be provided in request's parameters. From the data flow standpoint there is no difference between primary and secondary regions - sending traffic will be split equally between the two. The primary region is the region where the resource has been created and where it can be managed.
    @Sendable
    @inlinable
    public func createMultiRegionEndpoint(_ input: CreateMultiRegionEndpointRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateMultiRegionEndpointResponse {
        try await self.client.execute(
            operation: "CreateMultiRegionEndpoint", 
            path: "/v2/email/multi-region-endpoints", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a multi-region endpoint (global-endpoint). The primary region is going to be the AWS-Region where the operation is executed. The secondary region has to be provided in request's parameters. From the data flow standpoint there is no difference between primary and secondary regions - sending traffic will be split equally between the two. The primary region is the region where the resource has been created and where it can be managed.
    ///
    /// Parameters:
    ///   - details: Contains details of a multi-region endpoint (global-endpoint) being created.
    ///   - endpointName: The name of the multi-region endpoint (global-endpoint).
    ///   - tags: An array of objects that define the tags (keys and values) to associate with the multi-region endpoint (global-endpoint).
    ///   - logger: Logger use during operation
    @inlinable
    public func createMultiRegionEndpoint(
        details: Details,
        endpointName: String,
        tags: [Tag]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateMultiRegionEndpointResponse {
        let input = CreateMultiRegionEndpointRequest(
            details: details, 
            endpointName: endpointName, 
            tags: tags
        )
        return try await self.createMultiRegionEndpoint(input, logger: logger)
    }

    /// Delete an existing configuration set.  Configuration sets are groups of rules that you can apply to the emails you send. You apply a configuration set to an email by including a reference to the configuration set in the headers of the email. When you apply a configuration set to an email, all of the rules in that configuration set are applied to the email.
    @Sendable
    @inlinable
    public func deleteConfigurationSet(_ input: DeleteConfigurationSetRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteConfigurationSetResponse {
        try await self.client.execute(
            operation: "DeleteConfigurationSet", 
            path: "/v2/email/configuration-sets/{ConfigurationSetName}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Delete an existing configuration set.  Configuration sets are groups of rules that you can apply to the emails you send. You apply a configuration set to an email by including a reference to the configuration set in the headers of the email. When you apply a configuration set to an email, all of the rules in that configuration set are applied to the email.
    ///
    /// Parameters:
    ///   - configurationSetName: The name of the configuration set.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteConfigurationSet(
        configurationSetName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteConfigurationSetResponse {
        let input = DeleteConfigurationSetRequest(
            configurationSetName: configurationSetName
        )
        return try await self.deleteConfigurationSet(input, logger: logger)
    }

    /// Delete an event destination.  Events include message sends, deliveries, opens, clicks, bounces, and complaints. Event destinations are places that you can send information about these events to. For example, you can send event data to Amazon EventBridge and associate a rule to send the event to the specified target.
    @Sendable
    @inlinable
    public func deleteConfigurationSetEventDestination(_ input: DeleteConfigurationSetEventDestinationRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteConfigurationSetEventDestinationResponse {
        try await self.client.execute(
            operation: "DeleteConfigurationSetEventDestination", 
            path: "/v2/email/configuration-sets/{ConfigurationSetName}/event-destinations/{EventDestinationName}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Delete an event destination.  Events include message sends, deliveries, opens, clicks, bounces, and complaints. Event destinations are places that you can send information about these events to. For example, you can send event data to Amazon EventBridge and associate a rule to send the event to the specified target.
    ///
    /// Parameters:
    ///   - configurationSetName: The name of the configuration set that contains the event destination to delete.
    ///   - eventDestinationName: The name of the event destination to delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteConfigurationSetEventDestination(
        configurationSetName: String,
        eventDestinationName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteConfigurationSetEventDestinationResponse {
        let input = DeleteConfigurationSetEventDestinationRequest(
            configurationSetName: configurationSetName, 
            eventDestinationName: eventDestinationName
        )
        return try await self.deleteConfigurationSetEventDestination(input, logger: logger)
    }

    /// Removes a contact from a contact list.
    @Sendable
    @inlinable
    public func deleteContact(_ input: DeleteContactRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteContactResponse {
        try await self.client.execute(
            operation: "DeleteContact", 
            path: "/v2/email/contact-lists/{ContactListName}/contacts/{EmailAddress}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Removes a contact from a contact list.
    ///
    /// Parameters:
    ///   - contactListName: The name of the contact list from which the contact should be removed.
    ///   - emailAddress: The contact's email address.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteContact(
        contactListName: String,
        emailAddress: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteContactResponse {
        let input = DeleteContactRequest(
            contactListName: contactListName, 
            emailAddress: emailAddress
        )
        return try await self.deleteContact(input, logger: logger)
    }

    /// Deletes a contact list and all of the contacts on that list.
    @Sendable
    @inlinable
    public func deleteContactList(_ input: DeleteContactListRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteContactListResponse {
        try await self.client.execute(
            operation: "DeleteContactList", 
            path: "/v2/email/contact-lists/{ContactListName}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes a contact list and all of the contacts on that list.
    ///
    /// Parameters:
    ///   - contactListName: The name of the contact list.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteContactList(
        contactListName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteContactListResponse {
        let input = DeleteContactListRequest(
            contactListName: contactListName
        )
        return try await self.deleteContactList(input, logger: logger)
    }

    /// Deletes an existing custom verification email template. For more information about custom verification email templates, see Using custom verification email templates in the Amazon SES Developer Guide. You can execute this operation no more than once per second.
    @Sendable
    @inlinable
    public func deleteCustomVerificationEmailTemplate(_ input: DeleteCustomVerificationEmailTemplateRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteCustomVerificationEmailTemplateResponse {
        try await self.client.execute(
            operation: "DeleteCustomVerificationEmailTemplate", 
            path: "/v2/email/custom-verification-email-templates/{TemplateName}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes an existing custom verification email template. For more information about custom verification email templates, see Using custom verification email templates in the Amazon SES Developer Guide. You can execute this operation no more than once per second.
    ///
    /// Parameters:
    ///   - templateName: The name of the custom verification email template that you want to delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteCustomVerificationEmailTemplate(
        templateName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteCustomVerificationEmailTemplateResponse {
        let input = DeleteCustomVerificationEmailTemplateRequest(
            templateName: templateName
        )
        return try await self.deleteCustomVerificationEmailTemplate(input, logger: logger)
    }

    /// Delete a dedicated IP pool.
    @Sendable
    @inlinable
    public func deleteDedicatedIpPool(_ input: DeleteDedicatedIpPoolRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteDedicatedIpPoolResponse {
        try await self.client.execute(
            operation: "DeleteDedicatedIpPool", 
            path: "/v2/email/dedicated-ip-pools/{PoolName}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Delete a dedicated IP pool.
    ///
    /// Parameters:
    ///   - poolName: The name of the dedicated IP pool that you want to delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteDedicatedIpPool(
        poolName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteDedicatedIpPoolResponse {
        let input = DeleteDedicatedIpPoolRequest(
            poolName: poolName
        )
        return try await self.deleteDedicatedIpPool(input, logger: logger)
    }

    /// Deletes an email identity. An identity can be either an email address or a domain name.
    @Sendable
    @inlinable
    public func deleteEmailIdentity(_ input: DeleteEmailIdentityRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteEmailIdentityResponse {
        try await self.client.execute(
            operation: "DeleteEmailIdentity", 
            path: "/v2/email/identities/{EmailIdentity}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes an email identity. An identity can be either an email address or a domain name.
    ///
    /// Parameters:
    ///   - emailIdentity: The identity (that is, the email address or domain) to delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteEmailIdentity(
        emailIdentity: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteEmailIdentityResponse {
        let input = DeleteEmailIdentityRequest(
            emailIdentity: emailIdentity
        )
        return try await self.deleteEmailIdentity(input, logger: logger)
    }

    /// Deletes the specified sending authorization policy for the given identity (an email address or a domain). This API returns successfully even if a policy with the specified name does not exist.  This API is for the identity owner only. If you have not verified the identity, this API will return an error.  Sending authorization is a feature that enables an identity owner to authorize other senders to use its identities. For information about using sending authorization, see the Amazon SES Developer Guide. You can execute this operation no more than once per second.
    @Sendable
    @inlinable
    public func deleteEmailIdentityPolicy(_ input: DeleteEmailIdentityPolicyRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteEmailIdentityPolicyResponse {
        try await self.client.execute(
            operation: "DeleteEmailIdentityPolicy", 
            path: "/v2/email/identities/{EmailIdentity}/policies/{PolicyName}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes the specified sending authorization policy for the given identity (an email address or a domain). This API returns successfully even if a policy with the specified name does not exist.  This API is for the identity owner only. If you have not verified the identity, this API will return an error.  Sending authorization is a feature that enables an identity owner to authorize other senders to use its identities. For information about using sending authorization, see the Amazon SES Developer Guide. You can execute this operation no more than once per second.
    ///
    /// Parameters:
    ///   - emailIdentity: The email identity.
    ///   - policyName: The name of the policy. The policy name cannot exceed 64 characters and can only include alphanumeric characters, dashes, and underscores.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteEmailIdentityPolicy(
        emailIdentity: String,
        policyName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteEmailIdentityPolicyResponse {
        let input = DeleteEmailIdentityPolicyRequest(
            emailIdentity: emailIdentity, 
            policyName: policyName
        )
        return try await self.deleteEmailIdentityPolicy(input, logger: logger)
    }

    /// Deletes an email template. You can execute this operation no more than once per second.
    @Sendable
    @inlinable
    public func deleteEmailTemplate(_ input: DeleteEmailTemplateRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteEmailTemplateResponse {
        try await self.client.execute(
            operation: "DeleteEmailTemplate", 
            path: "/v2/email/templates/{TemplateName}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes an email template. You can execute this operation no more than once per second.
    ///
    /// Parameters:
    ///   - templateName: The name of the template to be deleted.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteEmailTemplate(
        templateName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteEmailTemplateResponse {
        let input = DeleteEmailTemplateRequest(
            templateName: templateName
        )
        return try await self.deleteEmailTemplate(input, logger: logger)
    }

    /// Deletes a multi-region endpoint (global-endpoint). Only multi-region endpoints (global-endpoints) whose primary region is the AWS-Region where operation is executed can be deleted.
    @Sendable
    @inlinable
    public func deleteMultiRegionEndpoint(_ input: DeleteMultiRegionEndpointRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteMultiRegionEndpointResponse {
        try await self.client.execute(
            operation: "DeleteMultiRegionEndpoint", 
            path: "/v2/email/multi-region-endpoints/{EndpointName}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes a multi-region endpoint (global-endpoint). Only multi-region endpoints (global-endpoints) whose primary region is the AWS-Region where operation is executed can be deleted.
    ///
    /// Parameters:
    ///   - endpointName: The name of the multi-region endpoint (global-endpoint) to be deleted.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteMultiRegionEndpoint(
        endpointName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteMultiRegionEndpointResponse {
        let input = DeleteMultiRegionEndpointRequest(
            endpointName: endpointName
        )
        return try await self.deleteMultiRegionEndpoint(input, logger: logger)
    }

    /// Removes an email address from the suppression list for your account.
    @Sendable
    @inlinable
    public func deleteSuppressedDestination(_ input: DeleteSuppressedDestinationRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteSuppressedDestinationResponse {
        try await self.client.execute(
            operation: "DeleteSuppressedDestination", 
            path: "/v2/email/suppression/addresses/{EmailAddress}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Removes an email address from the suppression list for your account.
    ///
    /// Parameters:
    ///   - emailAddress: The suppressed email destination to remove from the account suppression list.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteSuppressedDestination(
        emailAddress: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteSuppressedDestinationResponse {
        let input = DeleteSuppressedDestinationRequest(
            emailAddress: emailAddress
        )
        return try await self.deleteSuppressedDestination(input, logger: logger)
    }

    /// Obtain information about the email-sending status and capabilities of your Amazon SES account in the current Amazon Web Services Region.
    @Sendable
    @inlinable
    public func getAccount(_ input: GetAccountRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetAccountResponse {
        try await self.client.execute(
            operation: "GetAccount", 
            path: "/v2/email/account", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Obtain information about the email-sending status and capabilities of your Amazon SES account in the current Amazon Web Services Region.
    ///
    /// Parameters:
    ///   - logger: Logger use during operation
    @inlinable
    public func getAccount(
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetAccountResponse {
        let input = GetAccountRequest(
        )
        return try await self.getAccount(input, logger: logger)
    }

    /// Retrieve a list of the blacklists that your dedicated IP addresses appear on.
    @Sendable
    @inlinable
    public func getBlacklistReports(_ input: GetBlacklistReportsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetBlacklistReportsResponse {
        try await self.client.execute(
            operation: "GetBlacklistReports", 
            path: "/v2/email/deliverability-dashboard/blacklist-report", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieve a list of the blacklists that your dedicated IP addresses appear on.
    ///
    /// Parameters:
    ///   - blacklistItemNames: A list of IP addresses that you want to retrieve blacklist information about. You can only specify the dedicated IP addresses that you use to send email using Amazon SES or Amazon Pinpoint.
    ///   - logger: Logger use during operation
    @inlinable
    public func getBlacklistReports(
        blacklistItemNames: [String],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetBlacklistReportsResponse {
        let input = GetBlacklistReportsRequest(
            blacklistItemNames: blacklistItemNames
        )
        return try await self.getBlacklistReports(input, logger: logger)
    }

    /// Get information about an existing configuration set, including the dedicated IP pool that it's associated with, whether or not it's enabled for sending email, and more.  Configuration sets are groups of rules that you can apply to the emails you send. You apply a configuration set to an email by including a reference to the configuration set in the headers of the email. When you apply a configuration set to an email, all of the rules in that configuration set are applied to the email.
    @Sendable
    @inlinable
    public func getConfigurationSet(_ input: GetConfigurationSetRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetConfigurationSetResponse {
        try await self.client.execute(
            operation: "GetConfigurationSet", 
            path: "/v2/email/configuration-sets/{ConfigurationSetName}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Get information about an existing configuration set, including the dedicated IP pool that it's associated with, whether or not it's enabled for sending email, and more.  Configuration sets are groups of rules that you can apply to the emails you send. You apply a configuration set to an email by including a reference to the configuration set in the headers of the email. When you apply a configuration set to an email, all of the rules in that configuration set are applied to the email.
    ///
    /// Parameters:
    ///   - configurationSetName: The name of the configuration set.
    ///   - logger: Logger use during operation
    @inlinable
    public func getConfigurationSet(
        configurationSetName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetConfigurationSetResponse {
        let input = GetConfigurationSetRequest(
            configurationSetName: configurationSetName
        )
        return try await self.getConfigurationSet(input, logger: logger)
    }

    /// Retrieve a list of event destinations that are associated with a configuration set.  Events include message sends, deliveries, opens, clicks, bounces, and complaints. Event destinations are places that you can send information about these events to. For example, you can send event data to Amazon EventBridge and associate a rule to send the event to the specified target.
    @Sendable
    @inlinable
    public func getConfigurationSetEventDestinations(_ input: GetConfigurationSetEventDestinationsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetConfigurationSetEventDestinationsResponse {
        try await self.client.execute(
            operation: "GetConfigurationSetEventDestinations", 
            path: "/v2/email/configuration-sets/{ConfigurationSetName}/event-destinations", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieve a list of event destinations that are associated with a configuration set.  Events include message sends, deliveries, opens, clicks, bounces, and complaints. Event destinations are places that you can send information about these events to. For example, you can send event data to Amazon EventBridge and associate a rule to send the event to the specified target.
    ///
    /// Parameters:
    ///   - configurationSetName: The name of the configuration set that contains the event destination.
    ///   - logger: Logger use during operation
    @inlinable
    public func getConfigurationSetEventDestinations(
        configurationSetName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetConfigurationSetEventDestinationsResponse {
        let input = GetConfigurationSetEventDestinationsRequest(
            configurationSetName: configurationSetName
        )
        return try await self.getConfigurationSetEventDestinations(input, logger: logger)
    }

    /// Returns a contact from a contact list.
    @Sendable
    @inlinable
    public func getContact(_ input: GetContactRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetContactResponse {
        try await self.client.execute(
            operation: "GetContact", 
            path: "/v2/email/contact-lists/{ContactListName}/contacts/{EmailAddress}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns a contact from a contact list.
    ///
    /// Parameters:
    ///   - contactListName: The name of the contact list to which the contact belongs.
    ///   - emailAddress: The contact's email address.
    ///   - logger: Logger use during operation
    @inlinable
    public func getContact(
        contactListName: String,
        emailAddress: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetContactResponse {
        let input = GetContactRequest(
            contactListName: contactListName, 
            emailAddress: emailAddress
        )
        return try await self.getContact(input, logger: logger)
    }

    /// Returns contact list metadata. It does not return any information about the contacts present in the list.
    @Sendable
    @inlinable
    public func getContactList(_ input: GetContactListRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetContactListResponse {
        try await self.client.execute(
            operation: "GetContactList", 
            path: "/v2/email/contact-lists/{ContactListName}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns contact list metadata. It does not return any information about the contacts present in the list.
    ///
    /// Parameters:
    ///   - contactListName: The name of the contact list.
    ///   - logger: Logger use during operation
    @inlinable
    public func getContactList(
        contactListName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetContactListResponse {
        let input = GetContactListRequest(
            contactListName: contactListName
        )
        return try await self.getContactList(input, logger: logger)
    }

    /// Returns the custom email verification template for the template name you specify. For more information about custom verification email templates, see Using custom verification email templates in the Amazon SES Developer Guide. You can execute this operation no more than once per second.
    @Sendable
    @inlinable
    public func getCustomVerificationEmailTemplate(_ input: GetCustomVerificationEmailTemplateRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetCustomVerificationEmailTemplateResponse {
        try await self.client.execute(
            operation: "GetCustomVerificationEmailTemplate", 
            path: "/v2/email/custom-verification-email-templates/{TemplateName}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns the custom email verification template for the template name you specify. For more information about custom verification email templates, see Using custom verification email templates in the Amazon SES Developer Guide. You can execute this operation no more than once per second.
    ///
    /// Parameters:
    ///   - templateName: The name of the custom verification email template that you want to retrieve.
    ///   - logger: Logger use during operation
    @inlinable
    public func getCustomVerificationEmailTemplate(
        templateName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetCustomVerificationEmailTemplateResponse {
        let input = GetCustomVerificationEmailTemplateRequest(
            templateName: templateName
        )
        return try await self.getCustomVerificationEmailTemplate(input, logger: logger)
    }

    /// Get information about a dedicated IP address, including the name of the dedicated IP pool that it's associated with, as well information about the automatic warm-up process for the address.
    @Sendable
    @inlinable
    public func getDedicatedIp(_ input: GetDedicatedIpRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetDedicatedIpResponse {
        try await self.client.execute(
            operation: "GetDedicatedIp", 
            path: "/v2/email/dedicated-ips/{Ip}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Get information about a dedicated IP address, including the name of the dedicated IP pool that it's associated with, as well information about the automatic warm-up process for the address.
    ///
    /// Parameters:
    ///   - ip: The IP address that you want to obtain more information about. The value you specify has to be a dedicated IP address that's assocaited with your Amazon Web Services account.
    ///   - logger: Logger use during operation
    @inlinable
    public func getDedicatedIp(
        ip: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetDedicatedIpResponse {
        let input = GetDedicatedIpRequest(
            ip: ip
        )
        return try await self.getDedicatedIp(input, logger: logger)
    }

    /// Retrieve information about the dedicated pool.
    @Sendable
    @inlinable
    public func getDedicatedIpPool(_ input: GetDedicatedIpPoolRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetDedicatedIpPoolResponse {
        try await self.client.execute(
            operation: "GetDedicatedIpPool", 
            path: "/v2/email/dedicated-ip-pools/{PoolName}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieve information about the dedicated pool.
    ///
    /// Parameters:
    ///   - poolName: The name of the dedicated IP pool to retrieve.
    ///   - logger: Logger use during operation
    @inlinable
    public func getDedicatedIpPool(
        poolName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetDedicatedIpPoolResponse {
        let input = GetDedicatedIpPoolRequest(
            poolName: poolName
        )
        return try await self.getDedicatedIpPool(input, logger: logger)
    }

    /// List the dedicated IP addresses that are associated with your Amazon Web Services account.
    @Sendable
    @inlinable
    public func getDedicatedIps(_ input: GetDedicatedIpsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetDedicatedIpsResponse {
        try await self.client.execute(
            operation: "GetDedicatedIps", 
            path: "/v2/email/dedicated-ips", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// List the dedicated IP addresses that are associated with your Amazon Web Services account.
    ///
    /// Parameters:
    ///   - nextToken: A token returned from a previous call to GetDedicatedIps to indicate the position of the dedicated IP pool in the list of IP pools.
    ///   - pageSize: The number of results to show in a single call to GetDedicatedIpsRequest. If the number of results is larger than the number you specified in this parameter, then the response includes a NextToken element, which you can use to obtain additional results.
    ///   - poolName: The name of the IP pool that the dedicated IP address is associated with.
    ///   - logger: Logger use during operation
    @inlinable
    public func getDedicatedIps(
        nextToken: String? = nil,
        pageSize: Int? = nil,
        poolName: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetDedicatedIpsResponse {
        let input = GetDedicatedIpsRequest(
            nextToken: nextToken, 
            pageSize: pageSize, 
            poolName: poolName
        )
        return try await self.getDedicatedIps(input, logger: logger)
    }

    /// Retrieve information about the status of the Deliverability dashboard for your account. When the Deliverability dashboard is enabled, you gain access to reputation, deliverability, and other metrics for the domains that you use to send email. You also gain the ability to perform predictive inbox placement tests. When you use the Deliverability dashboard, you pay a monthly subscription charge, in addition to any other fees that you accrue by using Amazon SES and other Amazon Web Services services. For more information about the features and cost of a Deliverability dashboard subscription, see Amazon SES Pricing.
    @Sendable
    @inlinable
    public func getDeliverabilityDashboardOptions(_ input: GetDeliverabilityDashboardOptionsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetDeliverabilityDashboardOptionsResponse {
        try await self.client.execute(
            operation: "GetDeliverabilityDashboardOptions", 
            path: "/v2/email/deliverability-dashboard", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieve information about the status of the Deliverability dashboard for your account. When the Deliverability dashboard is enabled, you gain access to reputation, deliverability, and other metrics for the domains that you use to send email. You also gain the ability to perform predictive inbox placement tests. When you use the Deliverability dashboard, you pay a monthly subscription charge, in addition to any other fees that you accrue by using Amazon SES and other Amazon Web Services services. For more information about the features and cost of a Deliverability dashboard subscription, see Amazon SES Pricing.
    ///
    /// Parameters:
    ///   - logger: Logger use during operation
    @inlinable
    public func getDeliverabilityDashboardOptions(
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetDeliverabilityDashboardOptionsResponse {
        let input = GetDeliverabilityDashboardOptionsRequest(
        )
        return try await self.getDeliverabilityDashboardOptions(input, logger: logger)
    }

    /// Retrieve the results of a predictive inbox placement test.
    @Sendable
    @inlinable
    public func getDeliverabilityTestReport(_ input: GetDeliverabilityTestReportRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetDeliverabilityTestReportResponse {
        try await self.client.execute(
            operation: "GetDeliverabilityTestReport", 
            path: "/v2/email/deliverability-dashboard/test-reports/{ReportId}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieve the results of a predictive inbox placement test.
    ///
    /// Parameters:
    ///   - reportId: A unique string that identifies the predictive inbox placement test.
    ///   - logger: Logger use during operation
    @inlinable
    public func getDeliverabilityTestReport(
        reportId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetDeliverabilityTestReportResponse {
        let input = GetDeliverabilityTestReportRequest(
            reportId: reportId
        )
        return try await self.getDeliverabilityTestReport(input, logger: logger)
    }

    /// Retrieve all the deliverability data for a specific campaign. This data is available for a campaign only if the campaign sent email by using a domain that the Deliverability dashboard is enabled for.
    @Sendable
    @inlinable
    public func getDomainDeliverabilityCampaign(_ input: GetDomainDeliverabilityCampaignRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetDomainDeliverabilityCampaignResponse {
        try await self.client.execute(
            operation: "GetDomainDeliverabilityCampaign", 
            path: "/v2/email/deliverability-dashboard/campaigns/{CampaignId}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieve all the deliverability data for a specific campaign. This data is available for a campaign only if the campaign sent email by using a domain that the Deliverability dashboard is enabled for.
    ///
    /// Parameters:
    ///   - campaignId: The unique identifier for the campaign. The Deliverability dashboard automatically generates and assigns this identifier to a campaign.
    ///   - logger: Logger use during operation
    @inlinable
    public func getDomainDeliverabilityCampaign(
        campaignId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetDomainDeliverabilityCampaignResponse {
        let input = GetDomainDeliverabilityCampaignRequest(
            campaignId: campaignId
        )
        return try await self.getDomainDeliverabilityCampaign(input, logger: logger)
    }

    /// Retrieve inbox placement and engagement rates for the domains that you use to send email.
    @Sendable
    @inlinable
    public func getDomainStatisticsReport(_ input: GetDomainStatisticsReportRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetDomainStatisticsReportResponse {
        try await self.client.execute(
            operation: "GetDomainStatisticsReport", 
            path: "/v2/email/deliverability-dashboard/statistics-report/{Domain}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieve inbox placement and engagement rates for the domains that you use to send email.
    ///
    /// Parameters:
    ///   - domain: The domain that you want to obtain deliverability metrics for.
    ///   - endDate: The last day (in Unix time) that you want to obtain domain deliverability metrics for. The EndDate that you specify has to be less than or equal to 30 days after the StartDate.
    ///   - startDate: The first day (in Unix time) that you want to obtain domain deliverability metrics for.
    ///   - logger: Logger use during operation
    @inlinable
    public func getDomainStatisticsReport(
        domain: String,
        endDate: Date,
        startDate: Date,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetDomainStatisticsReportResponse {
        let input = GetDomainStatisticsReportRequest(
            domain: domain, 
            endDate: endDate, 
            startDate: startDate
        )
        return try await self.getDomainStatisticsReport(input, logger: logger)
    }

    /// Provides information about a specific identity, including the identity's verification status, sending authorization policies, its DKIM authentication status, and its custom Mail-From settings.
    @Sendable
    @inlinable
    public func getEmailIdentity(_ input: GetEmailIdentityRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetEmailIdentityResponse {
        try await self.client.execute(
            operation: "GetEmailIdentity", 
            path: "/v2/email/identities/{EmailIdentity}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Provides information about a specific identity, including the identity's verification status, sending authorization policies, its DKIM authentication status, and its custom Mail-From settings.
    ///
    /// Parameters:
    ///   - emailIdentity: The email identity.
    ///   - logger: Logger use during operation
    @inlinable
    public func getEmailIdentity(
        emailIdentity: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetEmailIdentityResponse {
        let input = GetEmailIdentityRequest(
            emailIdentity: emailIdentity
        )
        return try await self.getEmailIdentity(input, logger: logger)
    }

    /// Returns the requested sending authorization policies for the given identity (an email address or a domain). The policies are returned as a map of policy names to policy contents. You can retrieve a maximum of 20 policies at a time.  This API is for the identity owner only. If you have not verified the identity, this API will return an error.  Sending authorization is a feature that enables an identity owner to authorize other senders to use its identities. For information about using sending authorization, see the Amazon SES Developer Guide. You can execute this operation no more than once per second.
    @Sendable
    @inlinable
    public func getEmailIdentityPolicies(_ input: GetEmailIdentityPoliciesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetEmailIdentityPoliciesResponse {
        try await self.client.execute(
            operation: "GetEmailIdentityPolicies", 
            path: "/v2/email/identities/{EmailIdentity}/policies", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns the requested sending authorization policies for the given identity (an email address or a domain). The policies are returned as a map of policy names to policy contents. You can retrieve a maximum of 20 policies at a time.  This API is for the identity owner only. If you have not verified the identity, this API will return an error.  Sending authorization is a feature that enables an identity owner to authorize other senders to use its identities. For information about using sending authorization, see the Amazon SES Developer Guide. You can execute this operation no more than once per second.
    ///
    /// Parameters:
    ///   - emailIdentity: The email identity.
    ///   - logger: Logger use during operation
    @inlinable
    public func getEmailIdentityPolicies(
        emailIdentity: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetEmailIdentityPoliciesResponse {
        let input = GetEmailIdentityPoliciesRequest(
            emailIdentity: emailIdentity
        )
        return try await self.getEmailIdentityPolicies(input, logger: logger)
    }

    /// Displays the template object (which includes the subject line, HTML part and text part) for the template you specify. You can execute this operation no more than once per second.
    @Sendable
    @inlinable
    public func getEmailTemplate(_ input: GetEmailTemplateRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetEmailTemplateResponse {
        try await self.client.execute(
            operation: "GetEmailTemplate", 
            path: "/v2/email/templates/{TemplateName}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Displays the template object (which includes the subject line, HTML part and text part) for the template you specify. You can execute this operation no more than once per second.
    ///
    /// Parameters:
    ///   - templateName: The name of the template.
    ///   - logger: Logger use during operation
    @inlinable
    public func getEmailTemplate(
        templateName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetEmailTemplateResponse {
        let input = GetEmailTemplateRequest(
            templateName: templateName
        )
        return try await self.getEmailTemplate(input, logger: logger)
    }

    /// Provides information about an export job.
    @Sendable
    @inlinable
    public func getExportJob(_ input: GetExportJobRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetExportJobResponse {
        try await self.client.execute(
            operation: "GetExportJob", 
            path: "/v2/email/export-jobs/{JobId}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Provides information about an export job.
    ///
    /// Parameters:
    ///   - jobId: The export job ID.
    ///   - logger: Logger use during operation
    @inlinable
    public func getExportJob(
        jobId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetExportJobResponse {
        let input = GetExportJobRequest(
            jobId: jobId
        )
        return try await self.getExportJob(input, logger: logger)
    }

    /// Provides information about an import job.
    @Sendable
    @inlinable
    public func getImportJob(_ input: GetImportJobRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetImportJobResponse {
        try await self.client.execute(
            operation: "GetImportJob", 
            path: "/v2/email/import-jobs/{JobId}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Provides information about an import job.
    ///
    /// Parameters:
    ///   - jobId: The ID of the import job.
    ///   - logger: Logger use during operation
    @inlinable
    public func getImportJob(
        jobId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetImportJobResponse {
        let input = GetImportJobRequest(
            jobId: jobId
        )
        return try await self.getImportJob(input, logger: logger)
    }

    /// Provides information about a specific message, including the from address, the subject, the recipient address, email tags, as well as events associated with the message. You can execute this operation no more than once per second.
    @Sendable
    @inlinable
    public func getMessageInsights(_ input: GetMessageInsightsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetMessageInsightsResponse {
        try await self.client.execute(
            operation: "GetMessageInsights", 
            path: "/v2/email/insights/{MessageId}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Provides information about a specific message, including the from address, the subject, the recipient address, email tags, as well as events associated with the message. You can execute this operation no more than once per second.
    ///
    /// Parameters:
    ///   - messageId:  A MessageId is a unique identifier for a message, and is returned when sending emails through Amazon SES.
    ///   - logger: Logger use during operation
    @inlinable
    public func getMessageInsights(
        messageId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetMessageInsightsResponse {
        let input = GetMessageInsightsRequest(
            messageId: messageId
        )
        return try await self.getMessageInsights(input, logger: logger)
    }

    /// Displays the multi-region endpoint (global-endpoint) configuration. Only multi-region endpoints (global-endpoints) whose primary region is the AWS-Region where operation is executed can be displayed.
    @Sendable
    @inlinable
    public func getMultiRegionEndpoint(_ input: GetMultiRegionEndpointRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetMultiRegionEndpointResponse {
        try await self.client.execute(
            operation: "GetMultiRegionEndpoint", 
            path: "/v2/email/multi-region-endpoints/{EndpointName}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Displays the multi-region endpoint (global-endpoint) configuration. Only multi-region endpoints (global-endpoints) whose primary region is the AWS-Region where operation is executed can be displayed.
    ///
    /// Parameters:
    ///   - endpointName: The name of the multi-region endpoint (global-endpoint).
    ///   - logger: Logger use during operation
    @inlinable
    public func getMultiRegionEndpoint(
        endpointName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetMultiRegionEndpointResponse {
        let input = GetMultiRegionEndpointRequest(
            endpointName: endpointName
        )
        return try await self.getMultiRegionEndpoint(input, logger: logger)
    }

    /// Retrieves information about a specific email address that's on the suppression list for your account.
    @Sendable
    @inlinable
    public func getSuppressedDestination(_ input: GetSuppressedDestinationRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetSuppressedDestinationResponse {
        try await self.client.execute(
            operation: "GetSuppressedDestination", 
            path: "/v2/email/suppression/addresses/{EmailAddress}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves information about a specific email address that's on the suppression list for your account.
    ///
    /// Parameters:
    ///   - emailAddress: The email address that's on the account suppression list.
    ///   - logger: Logger use during operation
    @inlinable
    public func getSuppressedDestination(
        emailAddress: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetSuppressedDestinationResponse {
        let input = GetSuppressedDestinationRequest(
            emailAddress: emailAddress
        )
        return try await self.getSuppressedDestination(input, logger: logger)
    }

    /// List all of the configuration sets associated with your account in the current region.  Configuration sets are groups of rules that you can apply to the emails you send. You apply a configuration set to an email by including a reference to the configuration set in the headers of the email. When you apply a configuration set to an email, all of the rules in that configuration set are applied to the email.
    @Sendable
    @inlinable
    public func listConfigurationSets(_ input: ListConfigurationSetsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListConfigurationSetsResponse {
        try await self.client.execute(
            operation: "ListConfigurationSets", 
            path: "/v2/email/configuration-sets", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// List all of the configuration sets associated with your account in the current region.  Configuration sets are groups of rules that you can apply to the emails you send. You apply a configuration set to an email by including a reference to the configuration set in the headers of the email. When you apply a configuration set to an email, all of the rules in that configuration set are applied to the email.
    ///
    /// Parameters:
    ///   - nextToken: A token returned from a previous call to ListConfigurationSets to indicate the position in the list of configuration sets.
    ///   - pageSize: The number of results to show in a single call to ListConfigurationSets. If the number of results is larger than the number you specified in this parameter, then the response includes a NextToken element, which you can use to obtain additional results.
    ///   - logger: Logger use during operation
    @inlinable
    public func listConfigurationSets(
        nextToken: String? = nil,
        pageSize: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListConfigurationSetsResponse {
        let input = ListConfigurationSetsRequest(
            nextToken: nextToken, 
            pageSize: pageSize
        )
        return try await self.listConfigurationSets(input, logger: logger)
    }

    /// Lists all of the contact lists available. If your output includes a "NextToken" field with a string value, this indicates there may be additional contacts on the filtered list - regardless of the number of contacts returned.
    @Sendable
    @inlinable
    public func listContactLists(_ input: ListContactListsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListContactListsResponse {
        try await self.client.execute(
            operation: "ListContactLists", 
            path: "/v2/email/contact-lists", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists all of the contact lists available. If your output includes a "NextToken" field with a string value, this indicates there may be additional contacts on the filtered list - regardless of the number of contacts returned.
    ///
    /// Parameters:
    ///   - nextToken: A string token indicating that there might be additional contact lists available to be listed. Use the token provided in the Response to use in the subsequent call to ListContactLists with the same parameters to retrieve the next page of contact lists.
    ///   - pageSize: Maximum number of contact lists to return at once. Use this parameter to paginate results. If additional contact lists exist beyond the specified limit, the NextToken element is sent in the response. Use the NextToken value in subsequent requests to retrieve additional lists.
    ///   - logger: Logger use during operation
    @inlinable
    public func listContactLists(
        nextToken: String? = nil,
        pageSize: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListContactListsResponse {
        let input = ListContactListsRequest(
            nextToken: nextToken, 
            pageSize: pageSize
        )
        return try await self.listContactLists(input, logger: logger)
    }

    /// Lists the contacts present in a specific contact list.
    @Sendable
    @inlinable
    public func listContacts(_ input: ListContactsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListContactsResponse {
        try await self.client.execute(
            operation: "ListContacts", 
            path: "/v2/email/contact-lists/{ContactListName}/contacts/list", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists the contacts present in a specific contact list.
    ///
    /// Parameters:
    ///   - contactListName: The name of the contact list.
    ///   - filter: A filter that can be applied to a list of contacts.
    ///   - nextToken: A string token indicating that there might be additional contacts available to be listed. Use the token provided in the Response to use in the subsequent call to ListContacts with the same parameters to retrieve the next page of contacts.
    ///   - pageSize: The number of contacts that may be returned at once, which is dependent on if there are more or less contacts than the value of the PageSize. Use this parameter to paginate results. If additional contacts exist beyond the specified limit, the NextToken element is sent in the response. Use the NextToken value in subsequent requests to retrieve additional contacts.
    ///   - logger: Logger use during operation
    @inlinable
    public func listContacts(
        contactListName: String,
        filter: ListContactsFilter? = nil,
        nextToken: String? = nil,
        pageSize: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListContactsResponse {
        let input = ListContactsRequest(
            contactListName: contactListName, 
            filter: filter, 
            nextToken: nextToken, 
            pageSize: pageSize
        )
        return try await self.listContacts(input, logger: logger)
    }

    /// Lists the existing custom verification email templates for your account in the current Amazon Web Services Region. For more information about custom verification email templates, see Using custom verification email templates in the Amazon SES Developer Guide. You can execute this operation no more than once per second.
    @Sendable
    @inlinable
    public func listCustomVerificationEmailTemplates(_ input: ListCustomVerificationEmailTemplatesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListCustomVerificationEmailTemplatesResponse {
        try await self.client.execute(
            operation: "ListCustomVerificationEmailTemplates", 
            path: "/v2/email/custom-verification-email-templates", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists the existing custom verification email templates for your account in the current Amazon Web Services Region. For more information about custom verification email templates, see Using custom verification email templates in the Amazon SES Developer Guide. You can execute this operation no more than once per second.
    ///
    /// Parameters:
    ///   - nextToken: A token returned from a previous call to ListCustomVerificationEmailTemplates to indicate the position in the list of custom verification email templates.
    ///   - pageSize: The number of results to show in a single call to ListCustomVerificationEmailTemplates. If the number of results is larger than the number you specified in this parameter, then the response includes a NextToken element, which you can use to obtain additional results. The value you specify has to be at least 1, and can be no more than 50.
    ///   - logger: Logger use during operation
    @inlinable
    public func listCustomVerificationEmailTemplates(
        nextToken: String? = nil,
        pageSize: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListCustomVerificationEmailTemplatesResponse {
        let input = ListCustomVerificationEmailTemplatesRequest(
            nextToken: nextToken, 
            pageSize: pageSize
        )
        return try await self.listCustomVerificationEmailTemplates(input, logger: logger)
    }

    /// List all of the dedicated IP pools that exist in your Amazon Web Services account in the current Region.
    @Sendable
    @inlinable
    public func listDedicatedIpPools(_ input: ListDedicatedIpPoolsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListDedicatedIpPoolsResponse {
        try await self.client.execute(
            operation: "ListDedicatedIpPools", 
            path: "/v2/email/dedicated-ip-pools", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// List all of the dedicated IP pools that exist in your Amazon Web Services account in the current Region.
    ///
    /// Parameters:
    ///   - nextToken: A token returned from a previous call to ListDedicatedIpPools to indicate the position in the list of dedicated IP pools.
    ///   - pageSize: The number of results to show in a single call to ListDedicatedIpPools. If the number of results is larger than the number you specified in this parameter, then the response includes a NextToken element, which you can use to obtain additional results.
    ///   - logger: Logger use during operation
    @inlinable
    public func listDedicatedIpPools(
        nextToken: String? = nil,
        pageSize: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListDedicatedIpPoolsResponse {
        let input = ListDedicatedIpPoolsRequest(
            nextToken: nextToken, 
            pageSize: pageSize
        )
        return try await self.listDedicatedIpPools(input, logger: logger)
    }

    /// Show a list of the predictive inbox placement tests that you've performed, regardless of their statuses. For predictive inbox placement tests that are complete, you can use the GetDeliverabilityTestReport operation to view the results.
    @Sendable
    @inlinable
    public func listDeliverabilityTestReports(_ input: ListDeliverabilityTestReportsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListDeliverabilityTestReportsResponse {
        try await self.client.execute(
            operation: "ListDeliverabilityTestReports", 
            path: "/v2/email/deliverability-dashboard/test-reports", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Show a list of the predictive inbox placement tests that you've performed, regardless of their statuses. For predictive inbox placement tests that are complete, you can use the GetDeliverabilityTestReport operation to view the results.
    ///
    /// Parameters:
    ///   - nextToken: A token returned from a previous call to ListDeliverabilityTestReports to indicate the position in the list of predictive inbox placement tests.
    ///   - pageSize: The number of results to show in a single call to ListDeliverabilityTestReports. If the number of results is larger than the number you specified in this parameter, then the response includes a NextToken element, which you can use to obtain additional results. The value you specify has to be at least 0, and can be no more than 1000.
    ///   - logger: Logger use during operation
    @inlinable
    public func listDeliverabilityTestReports(
        nextToken: String? = nil,
        pageSize: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListDeliverabilityTestReportsResponse {
        let input = ListDeliverabilityTestReportsRequest(
            nextToken: nextToken, 
            pageSize: pageSize
        )
        return try await self.listDeliverabilityTestReports(input, logger: logger)
    }

    /// Retrieve deliverability data for all the campaigns that used a specific domain to send email during a specified time range. This data is available for a domain only if you enabled the Deliverability dashboard for the domain.
    @Sendable
    @inlinable
    public func listDomainDeliverabilityCampaigns(_ input: ListDomainDeliverabilityCampaignsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListDomainDeliverabilityCampaignsResponse {
        try await self.client.execute(
            operation: "ListDomainDeliverabilityCampaigns", 
            path: "/v2/email/deliverability-dashboard/domains/{SubscribedDomain}/campaigns", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieve deliverability data for all the campaigns that used a specific domain to send email during a specified time range. This data is available for a domain only if you enabled the Deliverability dashboard for the domain.
    ///
    /// Parameters:
    ///   - endDate: The last day that you want to obtain deliverability data for. This value has to be less than or equal to 30 days after the value of the StartDate parameter.
    ///   - nextToken: A token that’s returned from a previous call to the ListDomainDeliverabilityCampaigns operation. This token indicates the position of a campaign in the list of campaigns.
    ///   - pageSize: The maximum number of results to include in response to a single call to the ListDomainDeliverabilityCampaigns operation. If the number of results is larger than the number that you specify in this parameter, the response includes a NextToken element, which you can use to obtain additional results.
    ///   - startDate: The first day that you want to obtain deliverability data for.
    ///   - subscribedDomain: The domain to obtain deliverability data for.
    ///   - logger: Logger use during operation
    @inlinable
    public func listDomainDeliverabilityCampaigns(
        endDate: Date,
        nextToken: String? = nil,
        pageSize: Int? = nil,
        startDate: Date,
        subscribedDomain: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListDomainDeliverabilityCampaignsResponse {
        let input = ListDomainDeliverabilityCampaignsRequest(
            endDate: endDate, 
            nextToken: nextToken, 
            pageSize: pageSize, 
            startDate: startDate, 
            subscribedDomain: subscribedDomain
        )
        return try await self.listDomainDeliverabilityCampaigns(input, logger: logger)
    }

    /// Returns a list of all of the email identities that are associated with your Amazon Web Services account. An identity can be either an email address or a domain. This operation returns identities that are verified as well as those that aren't. This operation returns identities that are associated with Amazon SES and Amazon Pinpoint.
    @Sendable
    @inlinable
    public func listEmailIdentities(_ input: ListEmailIdentitiesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListEmailIdentitiesResponse {
        try await self.client.execute(
            operation: "ListEmailIdentities", 
            path: "/v2/email/identities", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns a list of all of the email identities that are associated with your Amazon Web Services account. An identity can be either an email address or a domain. This operation returns identities that are verified as well as those that aren't. This operation returns identities that are associated with Amazon SES and Amazon Pinpoint.
    ///
    /// Parameters:
    ///   - nextToken: A token returned from a previous call to ListEmailIdentities to indicate the position in the list of identities.
    ///   - pageSize: The number of results to show in a single call to ListEmailIdentities. If the number of results is larger than the number you specified in this parameter, then the response includes a NextToken element, which you can use to obtain additional results. The value you specify has to be at least 0, and can be no more than 1000.
    ///   - logger: Logger use during operation
    @inlinable
    public func listEmailIdentities(
        nextToken: String? = nil,
        pageSize: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListEmailIdentitiesResponse {
        let input = ListEmailIdentitiesRequest(
            nextToken: nextToken, 
            pageSize: pageSize
        )
        return try await self.listEmailIdentities(input, logger: logger)
    }

    /// Lists the email templates present in your Amazon SES account in the current Amazon Web Services Region. You can execute this operation no more than once per second.
    @Sendable
    @inlinable
    public func listEmailTemplates(_ input: ListEmailTemplatesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListEmailTemplatesResponse {
        try await self.client.execute(
            operation: "ListEmailTemplates", 
            path: "/v2/email/templates", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists the email templates present in your Amazon SES account in the current Amazon Web Services Region. You can execute this operation no more than once per second.
    ///
    /// Parameters:
    ///   - nextToken: A token returned from a previous call to ListEmailTemplates to indicate the position in the list of email templates.
    ///   - pageSize: The number of results to show in a single call to ListEmailTemplates. If the number of results is larger than the number you specified in this parameter, then the response includes a NextToken element, which you can use to obtain additional results. The value you specify has to be at least 1, and can be no more than 100.
    ///   - logger: Logger use during operation
    @inlinable
    public func listEmailTemplates(
        nextToken: String? = nil,
        pageSize: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListEmailTemplatesResponse {
        let input = ListEmailTemplatesRequest(
            nextToken: nextToken, 
            pageSize: pageSize
        )
        return try await self.listEmailTemplates(input, logger: logger)
    }

    /// Lists all of the export jobs.
    @Sendable
    @inlinable
    public func listExportJobs(_ input: ListExportJobsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListExportJobsResponse {
        try await self.client.execute(
            operation: "ListExportJobs", 
            path: "/v2/email/list-export-jobs", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists all of the export jobs.
    ///
    /// Parameters:
    ///   - exportSourceType: A value used to list export jobs that have a certain ExportSourceType.
    ///   - jobStatus: A value used to list export jobs that have a certain JobStatus.
    ///   - nextToken: The pagination token returned from a previous call to ListExportJobs to indicate the position in the list of export jobs.
    ///   - pageSize: Maximum number of export jobs to return at once. Use this parameter to paginate results. If additional export jobs exist beyond the specified limit, the NextToken element is sent in the response. Use the NextToken value in subsequent calls to ListExportJobs to retrieve additional export jobs.
    ///   - logger: Logger use during operation
    @inlinable
    public func listExportJobs(
        exportSourceType: ExportSourceType? = nil,
        jobStatus: JobStatus? = nil,
        nextToken: String? = nil,
        pageSize: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListExportJobsResponse {
        let input = ListExportJobsRequest(
            exportSourceType: exportSourceType, 
            jobStatus: jobStatus, 
            nextToken: nextToken, 
            pageSize: pageSize
        )
        return try await self.listExportJobs(input, logger: logger)
    }

    /// Lists all of the import jobs.
    @Sendable
    @inlinable
    public func listImportJobs(_ input: ListImportJobsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListImportJobsResponse {
        try await self.client.execute(
            operation: "ListImportJobs", 
            path: "/v2/email/import-jobs/list", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists all of the import jobs.
    ///
    /// Parameters:
    ///   - importDestinationType: The destination of the import job, which can be used to list import jobs that have a certain ImportDestinationType.
    ///   - nextToken: A string token indicating that there might be additional import jobs available to be listed. Copy this token to a subsequent call to ListImportJobs with the same parameters to retrieve the next page of import jobs.
    ///   - pageSize: Maximum number of import jobs to return at once. Use this parameter to paginate results. If additional import jobs exist beyond the specified limit, the NextToken element is sent in the response. Use the NextToken value in subsequent requests to retrieve additional addresses.
    ///   - logger: Logger use during operation
    @inlinable
    public func listImportJobs(
        importDestinationType: ImportDestinationType? = nil,
        nextToken: String? = nil,
        pageSize: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListImportJobsResponse {
        let input = ListImportJobsRequest(
            importDestinationType: importDestinationType, 
            nextToken: nextToken, 
            pageSize: pageSize
        )
        return try await self.listImportJobs(input, logger: logger)
    }

    /// List the multi-region endpoints (global-endpoints). Only multi-region endpoints (global-endpoints) whose primary region is the AWS-Region where operation is executed will be listed.
    @Sendable
    @inlinable
    public func listMultiRegionEndpoints(_ input: ListMultiRegionEndpointsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListMultiRegionEndpointsResponse {
        try await self.client.execute(
            operation: "ListMultiRegionEndpoints", 
            path: "/v2/email/multi-region-endpoints", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// List the multi-region endpoints (global-endpoints). Only multi-region endpoints (global-endpoints) whose primary region is the AWS-Region where operation is executed will be listed.
    ///
    /// Parameters:
    ///   - nextToken: A token returned from a previous call to ListMultiRegionEndpoints to indicate the position in the list of multi-region endpoints (global-endpoints).
    ///   - pageSize: The number of results to show in a single call to ListMultiRegionEndpoints. If the number of results is larger than the number you specified in this parameter, the response includes a NextToken element that you can use to retrieve the next page of results.
    ///   - logger: Logger use during operation
    @inlinable
    public func listMultiRegionEndpoints(
        nextToken: String? = nil,
        pageSize: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListMultiRegionEndpointsResponse {
        let input = ListMultiRegionEndpointsRequest(
            nextToken: nextToken, 
            pageSize: pageSize
        )
        return try await self.listMultiRegionEndpoints(input, logger: logger)
    }

    /// Lists the recommendations present in your Amazon SES account in the current Amazon Web Services Region. You can execute this operation no more than once per second.
    @Sendable
    @inlinable
    public func listRecommendations(_ input: ListRecommendationsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListRecommendationsResponse {
        try await self.client.execute(
            operation: "ListRecommendations", 
            path: "/v2/email/vdm/recommendations", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists the recommendations present in your Amazon SES account in the current Amazon Web Services Region. You can execute this operation no more than once per second.
    ///
    /// Parameters:
    ///   - filter: Filters applied when retrieving recommendations. Can eiter be an individual filter, or combinations of STATUS and IMPACT or STATUS and TYPE
    ///   - nextToken: A token returned from a previous call to ListRecommendations to indicate the position in the list of recommendations.
    ///   - pageSize: The number of results to show in a single call to ListRecommendations. If the number of results is larger than the number you specified in this parameter, then the response includes a NextToken element, which you can use to obtain additional results. The value you specify has to be at least 1, and can be no more than 100.
    ///   - logger: Logger use during operation
    @inlinable
    public func listRecommendations(
        filter: [ListRecommendationsFilterKey: String]? = nil,
        nextToken: String? = nil,
        pageSize: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListRecommendationsResponse {
        let input = ListRecommendationsRequest(
            filter: filter, 
            nextToken: nextToken, 
            pageSize: pageSize
        )
        return try await self.listRecommendations(input, logger: logger)
    }

    /// Retrieves a list of email addresses that are on the suppression list for your account.
    @Sendable
    @inlinable
    public func listSuppressedDestinations(_ input: ListSuppressedDestinationsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListSuppressedDestinationsResponse {
        try await self.client.execute(
            operation: "ListSuppressedDestinations", 
            path: "/v2/email/suppression/addresses", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves a list of email addresses that are on the suppression list for your account.
    ///
    /// Parameters:
    ///   - endDate: Used to filter the list of suppressed email destinations so that it only includes addresses that were added to the list before a specific date.
    ///   - nextToken: A token returned from a previous call to ListSuppressedDestinations to indicate the position in the list of suppressed email addresses.
    ///   - pageSize: The number of results to show in a single call to ListSuppressedDestinations. If the number of results is larger than the number you specified in this parameter, then the response includes a NextToken element, which you can use to obtain additional results.
    ///   - reasons: The factors that caused the email address to be added to .
    ///   - startDate: Used to filter the list of suppressed email destinations so that it only includes addresses that were added to the list after a specific date.
    ///   - logger: Logger use during operation
    @inlinable
    public func listSuppressedDestinations(
        endDate: Date? = nil,
        nextToken: String? = nil,
        pageSize: Int? = nil,
        reasons: [SuppressionListReason]? = nil,
        startDate: Date? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListSuppressedDestinationsResponse {
        let input = ListSuppressedDestinationsRequest(
            endDate: endDate, 
            nextToken: nextToken, 
            pageSize: pageSize, 
            reasons: reasons, 
            startDate: startDate
        )
        return try await self.listSuppressedDestinations(input, logger: logger)
    }

    /// Retrieve a list of the tags (keys and values) that are associated with a specified resource. A tag is a label that you optionally define and associate with a resource. Each tag consists of a required tag key and an optional associated tag value. A tag key is a general label that acts as a category for more specific tag values. A tag value acts as a descriptor within a tag key.
    @Sendable
    @inlinable
    public func listTagsForResource(_ input: ListTagsForResourceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListTagsForResourceResponse {
        try await self.client.execute(
            operation: "ListTagsForResource", 
            path: "/v2/email/tags", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieve a list of the tags (keys and values) that are associated with a specified resource. A tag is a label that you optionally define and associate with a resource. Each tag consists of a required tag key and an optional associated tag value. A tag key is a general label that acts as a category for more specific tag values. A tag value acts as a descriptor within a tag key.
    ///
    /// Parameters:
    ///   - resourceArn: The Amazon Resource Name (ARN) of the resource that you want to retrieve tag information for.
    ///   - logger: Logger use during operation
    @inlinable
    public func listTagsForResource(
        resourceArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListTagsForResourceResponse {
        let input = ListTagsForResourceRequest(
            resourceArn: resourceArn
        )
        return try await self.listTagsForResource(input, logger: logger)
    }

    /// Enable or disable the automatic warm-up feature for dedicated IP addresses.
    @Sendable
    @inlinable
    public func putAccountDedicatedIpWarmupAttributes(_ input: PutAccountDedicatedIpWarmupAttributesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> PutAccountDedicatedIpWarmupAttributesResponse {
        try await self.client.execute(
            operation: "PutAccountDedicatedIpWarmupAttributes", 
            path: "/v2/email/account/dedicated-ips/warmup", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Enable or disable the automatic warm-up feature for dedicated IP addresses.
    ///
    /// Parameters:
    ///   - autoWarmupEnabled: Enables or disables the automatic warm-up feature for dedicated IP addresses that are associated with your Amazon SES account in the current Amazon Web Services Region. Set to true to enable the automatic warm-up feature, or set to false to disable it.
    ///   - logger: Logger use during operation
    @inlinable
    public func putAccountDedicatedIpWarmupAttributes(
        autoWarmupEnabled: Bool? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> PutAccountDedicatedIpWarmupAttributesResponse {
        let input = PutAccountDedicatedIpWarmupAttributesRequest(
            autoWarmupEnabled: autoWarmupEnabled
        )
        return try await self.putAccountDedicatedIpWarmupAttributes(input, logger: logger)
    }

    /// Update your Amazon SES account details.
    @Sendable
    @inlinable
    public func putAccountDetails(_ input: PutAccountDetailsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> PutAccountDetailsResponse {
        try await self.client.execute(
            operation: "PutAccountDetails", 
            path: "/v2/email/account/details", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Update your Amazon SES account details.
    ///
    /// Parameters:
    ///   - additionalContactEmailAddresses: Additional email addresses that you would like to be notified regarding Amazon SES matters.
    ///   - contactLanguage: The language you would prefer to be contacted with.
    ///   - mailType: The type of email your account will send.
    ///   - productionAccessEnabled: Indicates whether or not your account should have production access in the current Amazon Web Services Region. If the value is false, then your account is in the sandbox. When your account is in the sandbox, you can only send email to verified identities.  If the value is true, then your account has production access. When your account has production access, you can send email to any address. The sending quota and maximum sending rate for your account vary based on your specific use case.
    ///   - useCaseDescription: A description of the types of email that you plan to send.
    ///   - websiteURL: The URL of your website. This information helps us better understand the type of content that you plan to send.
    ///   - logger: Logger use during operation
    @inlinable
    public func putAccountDetails(
        additionalContactEmailAddresses: [String]? = nil,
        contactLanguage: ContactLanguage? = nil,
        mailType: MailType,
        productionAccessEnabled: Bool? = nil,
        useCaseDescription: String? = nil,
        websiteURL: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> PutAccountDetailsResponse {
        let input = PutAccountDetailsRequest(
            additionalContactEmailAddresses: additionalContactEmailAddresses, 
            contactLanguage: contactLanguage, 
            mailType: mailType, 
            productionAccessEnabled: productionAccessEnabled, 
            useCaseDescription: useCaseDescription, 
            websiteURL: websiteURL
        )
        return try await self.putAccountDetails(input, logger: logger)
    }

    /// Enable or disable the ability of your account to send email.
    @Sendable
    @inlinable
    public func putAccountSendingAttributes(_ input: PutAccountSendingAttributesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> PutAccountSendingAttributesResponse {
        try await self.client.execute(
            operation: "PutAccountSendingAttributes", 
            path: "/v2/email/account/sending", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Enable or disable the ability of your account to send email.
    ///
    /// Parameters:
    ///   - sendingEnabled: Enables or disables your account's ability to send email. Set to true to enable email sending, or set to false to disable email sending.  If Amazon Web Services paused your account's ability to send email, you can't use this operation to resume your account's ability to send email.
    ///   - logger: Logger use during operation
    @inlinable
    public func putAccountSendingAttributes(
        sendingEnabled: Bool? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> PutAccountSendingAttributesResponse {
        let input = PutAccountSendingAttributesRequest(
            sendingEnabled: sendingEnabled
        )
        return try await self.putAccountSendingAttributes(input, logger: logger)
    }

    /// Change the settings for the account-level suppression list.
    @Sendable
    @inlinable
    public func putAccountSuppressionAttributes(_ input: PutAccountSuppressionAttributesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> PutAccountSuppressionAttributesResponse {
        try await self.client.execute(
            operation: "PutAccountSuppressionAttributes", 
            path: "/v2/email/account/suppression", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Change the settings for the account-level suppression list.
    ///
    /// Parameters:
    ///   - suppressedReasons: A list that contains the reasons that email addresses will be automatically added to the suppression list for your account. This list can contain any or all of the following:    COMPLAINT – Amazon SES adds an email address to the suppression list for your account when a message sent to that address results in a complaint.    BOUNCE – Amazon SES adds an email address to the suppression list for your account when a message sent to that address results in a hard bounce.
    ///   - logger: Logger use during operation
    @inlinable
    public func putAccountSuppressionAttributes(
        suppressedReasons: [SuppressionListReason]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> PutAccountSuppressionAttributesResponse {
        let input = PutAccountSuppressionAttributesRequest(
            suppressedReasons: suppressedReasons
        )
        return try await self.putAccountSuppressionAttributes(input, logger: logger)
    }

    /// Update your Amazon SES account VDM attributes. You can execute this operation no more than once per second.
    @Sendable
    @inlinable
    public func putAccountVdmAttributes(_ input: PutAccountVdmAttributesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> PutAccountVdmAttributesResponse {
        try await self.client.execute(
            operation: "PutAccountVdmAttributes", 
            path: "/v2/email/account/vdm", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Update your Amazon SES account VDM attributes. You can execute this operation no more than once per second.
    ///
    /// Parameters:
    ///   - vdmAttributes: The VDM attributes that you wish to apply to your Amazon SES account.
    ///   - logger: Logger use during operation
    @inlinable
    public func putAccountVdmAttributes(
        vdmAttributes: VdmAttributes,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> PutAccountVdmAttributesResponse {
        let input = PutAccountVdmAttributesRequest(
            vdmAttributes: vdmAttributes
        )
        return try await self.putAccountVdmAttributes(input, logger: logger)
    }

    /// Associate the configuration set with a MailManager archive. When you send email using the SendEmail or SendBulkEmail operations the message as it will be given to the receiving SMTP server will be archived, along with the recipient information.
    @Sendable
    @inlinable
    public func putConfigurationSetArchivingOptions(_ input: PutConfigurationSetArchivingOptionsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> PutConfigurationSetArchivingOptionsResponse {
        try await self.client.execute(
            operation: "PutConfigurationSetArchivingOptions", 
            path: "/v2/email/configuration-sets/{ConfigurationSetName}/archiving-options", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Associate the configuration set with a MailManager archive. When you send email using the SendEmail or SendBulkEmail operations the message as it will be given to the receiving SMTP server will be archived, along with the recipient information.
    ///
    /// Parameters:
    ///   - archiveArn: The Amazon Resource Name (ARN) of the MailManager archive that the Amazon SES API v2 sends email to.
    ///   - configurationSetName: The name of the configuration set to associate with a MailManager archive.
    ///   - logger: Logger use during operation
    @inlinable
    public func putConfigurationSetArchivingOptions(
        archiveArn: String? = nil,
        configurationSetName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> PutConfigurationSetArchivingOptionsResponse {
        let input = PutConfigurationSetArchivingOptionsRequest(
            archiveArn: archiveArn, 
            configurationSetName: configurationSetName
        )
        return try await self.putConfigurationSetArchivingOptions(input, logger: logger)
    }

    /// Associate a configuration set with a dedicated IP pool. You can use dedicated IP pools to create groups of dedicated IP addresses for sending specific types of email.
    @Sendable
    @inlinable
    public func putConfigurationSetDeliveryOptions(_ input: PutConfigurationSetDeliveryOptionsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> PutConfigurationSetDeliveryOptionsResponse {
        try await self.client.execute(
            operation: "PutConfigurationSetDeliveryOptions", 
            path: "/v2/email/configuration-sets/{ConfigurationSetName}/delivery-options", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Associate a configuration set with a dedicated IP pool. You can use dedicated IP pools to create groups of dedicated IP addresses for sending specific types of email.
    ///
    /// Parameters:
    ///   - configurationSetName: The name of the configuration set to associate with a dedicated IP pool.
    ///   - maxDeliverySeconds: The maximum amount of time, in seconds, that Amazon SES API v2 will attempt delivery of email. If specified, the value must greater than or equal to 300 seconds (5 minutes) and less than or equal to 50400 seconds (840 minutes).
    ///   - sendingPoolName: The name of the dedicated IP pool to associate with the configuration set.
    ///   - tlsPolicy: Specifies whether messages that use the configuration set are required to use Transport Layer Security (TLS). If the value is Require, messages are only delivered if a TLS connection can be established. If the value is Optional, messages can be delivered in plain text if a TLS connection can't be established.
    ///   - logger: Logger use during operation
    @inlinable
    public func putConfigurationSetDeliveryOptions(
        configurationSetName: String,
        maxDeliverySeconds: Int64? = nil,
        sendingPoolName: String? = nil,
        tlsPolicy: TlsPolicy? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> PutConfigurationSetDeliveryOptionsResponse {
        let input = PutConfigurationSetDeliveryOptionsRequest(
            configurationSetName: configurationSetName, 
            maxDeliverySeconds: maxDeliverySeconds, 
            sendingPoolName: sendingPoolName, 
            tlsPolicy: tlsPolicy
        )
        return try await self.putConfigurationSetDeliveryOptions(input, logger: logger)
    }

    /// Enable or disable collection of reputation metrics for emails that you send using a particular configuration set in a specific Amazon Web Services Region.
    @Sendable
    @inlinable
    public func putConfigurationSetReputationOptions(_ input: PutConfigurationSetReputationOptionsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> PutConfigurationSetReputationOptionsResponse {
        try await self.client.execute(
            operation: "PutConfigurationSetReputationOptions", 
            path: "/v2/email/configuration-sets/{ConfigurationSetName}/reputation-options", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Enable or disable collection of reputation metrics for emails that you send using a particular configuration set in a specific Amazon Web Services Region.
    ///
    /// Parameters:
    ///   - configurationSetName: The name of the configuration set.
    ///   - reputationMetricsEnabled: If true, tracking of reputation metrics is enabled for the configuration set. If false, tracking of reputation metrics is disabled for the configuration set.
    ///   - logger: Logger use during operation
    @inlinable
    public func putConfigurationSetReputationOptions(
        configurationSetName: String,
        reputationMetricsEnabled: Bool? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> PutConfigurationSetReputationOptionsResponse {
        let input = PutConfigurationSetReputationOptionsRequest(
            configurationSetName: configurationSetName, 
            reputationMetricsEnabled: reputationMetricsEnabled
        )
        return try await self.putConfigurationSetReputationOptions(input, logger: logger)
    }

    /// Enable or disable email sending for messages that use a particular configuration set in a specific Amazon Web Services Region.
    @Sendable
    @inlinable
    public func putConfigurationSetSendingOptions(_ input: PutConfigurationSetSendingOptionsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> PutConfigurationSetSendingOptionsResponse {
        try await self.client.execute(
            operation: "PutConfigurationSetSendingOptions", 
            path: "/v2/email/configuration-sets/{ConfigurationSetName}/sending", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Enable or disable email sending for messages that use a particular configuration set in a specific Amazon Web Services Region.
    ///
    /// Parameters:
    ///   - configurationSetName: The name of the configuration set to enable or disable email sending for.
    ///   - sendingEnabled: If true, email sending is enabled for the configuration set. If false, email sending is disabled for the configuration set.
    ///   - logger: Logger use during operation
    @inlinable
    public func putConfigurationSetSendingOptions(
        configurationSetName: String,
        sendingEnabled: Bool? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> PutConfigurationSetSendingOptionsResponse {
        let input = PutConfigurationSetSendingOptionsRequest(
            configurationSetName: configurationSetName, 
            sendingEnabled: sendingEnabled
        )
        return try await self.putConfigurationSetSendingOptions(input, logger: logger)
    }

    /// Specify the account suppression list preferences for a configuration set.
    @Sendable
    @inlinable
    public func putConfigurationSetSuppressionOptions(_ input: PutConfigurationSetSuppressionOptionsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> PutConfigurationSetSuppressionOptionsResponse {
        try await self.client.execute(
            operation: "PutConfigurationSetSuppressionOptions", 
            path: "/v2/email/configuration-sets/{ConfigurationSetName}/suppression-options", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Specify the account suppression list preferences for a configuration set.
    ///
    /// Parameters:
    ///   - configurationSetName: The name of the configuration set to change the suppression list preferences for.
    ///   - suppressedReasons: A list that contains the reasons that email addresses are automatically added to the suppression list for your account. This list can contain any or all of the following:    COMPLAINT – Amazon SES adds an email address to the suppression list for your account when a message sent to that address results in a complaint.    BOUNCE – Amazon SES adds an email address to the suppression list for your account when a message sent to that address results in a hard bounce.
    ///   - logger: Logger use during operation
    @inlinable
    public func putConfigurationSetSuppressionOptions(
        configurationSetName: String,
        suppressedReasons: [SuppressionListReason]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> PutConfigurationSetSuppressionOptionsResponse {
        let input = PutConfigurationSetSuppressionOptionsRequest(
            configurationSetName: configurationSetName, 
            suppressedReasons: suppressedReasons
        )
        return try await self.putConfigurationSetSuppressionOptions(input, logger: logger)
    }

    /// Specify a custom domain to use for open and click tracking elements in email that you send.
    @Sendable
    @inlinable
    public func putConfigurationSetTrackingOptions(_ input: PutConfigurationSetTrackingOptionsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> PutConfigurationSetTrackingOptionsResponse {
        try await self.client.execute(
            operation: "PutConfigurationSetTrackingOptions", 
            path: "/v2/email/configuration-sets/{ConfigurationSetName}/tracking-options", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Specify a custom domain to use for open and click tracking elements in email that you send.
    ///
    /// Parameters:
    ///   - configurationSetName: The name of the configuration set.
    ///   - customRedirectDomain: The domain to use to track open and click events.
    ///   - httpsPolicy: 
    ///   - logger: Logger use during operation
    @inlinable
    public func putConfigurationSetTrackingOptions(
        configurationSetName: String,
        customRedirectDomain: String? = nil,
        httpsPolicy: HttpsPolicy? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> PutConfigurationSetTrackingOptionsResponse {
        let input = PutConfigurationSetTrackingOptionsRequest(
            configurationSetName: configurationSetName, 
            customRedirectDomain: customRedirectDomain, 
            httpsPolicy: httpsPolicy
        )
        return try await self.putConfigurationSetTrackingOptions(input, logger: logger)
    }

    /// Specify VDM preferences for email that you send using the configuration set. You can execute this operation no more than once per second.
    @Sendable
    @inlinable
    public func putConfigurationSetVdmOptions(_ input: PutConfigurationSetVdmOptionsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> PutConfigurationSetVdmOptionsResponse {
        try await self.client.execute(
            operation: "PutConfigurationSetVdmOptions", 
            path: "/v2/email/configuration-sets/{ConfigurationSetName}/vdm-options", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Specify VDM preferences for email that you send using the configuration set. You can execute this operation no more than once per second.
    ///
    /// Parameters:
    ///   - configurationSetName: The name of the configuration set.
    ///   - vdmOptions: The VDM options to apply to the configuration set.
    ///   - logger: Logger use during operation
    @inlinable
    public func putConfigurationSetVdmOptions(
        configurationSetName: String,
        vdmOptions: VdmOptions? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> PutConfigurationSetVdmOptionsResponse {
        let input = PutConfigurationSetVdmOptionsRequest(
            configurationSetName: configurationSetName, 
            vdmOptions: vdmOptions
        )
        return try await self.putConfigurationSetVdmOptions(input, logger: logger)
    }

    /// Move a dedicated IP address to an existing dedicated IP pool.  The dedicated IP address that you specify must already exist, and must be associated with your Amazon Web Services account.   The dedicated IP pool you specify must already exist. You can create a new pool by using the CreateDedicatedIpPool operation.
    @Sendable
    @inlinable
    public func putDedicatedIpInPool(_ input: PutDedicatedIpInPoolRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> PutDedicatedIpInPoolResponse {
        try await self.client.execute(
            operation: "PutDedicatedIpInPool", 
            path: "/v2/email/dedicated-ips/{Ip}/pool", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Move a dedicated IP address to an existing dedicated IP pool.  The dedicated IP address that you specify must already exist, and must be associated with your Amazon Web Services account.   The dedicated IP pool you specify must already exist. You can create a new pool by using the CreateDedicatedIpPool operation.
    ///
    /// Parameters:
    ///   - destinationPoolName: The name of the IP pool that you want to add the dedicated IP address to. You have to specify an IP pool that already exists.
    ///   - ip: The IP address that you want to move to the dedicated IP pool. The value you specify has to be a dedicated IP address that's associated with your Amazon Web Services account.
    ///   - logger: Logger use during operation
    @inlinable
    public func putDedicatedIpInPool(
        destinationPoolName: String,
        ip: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> PutDedicatedIpInPoolResponse {
        let input = PutDedicatedIpInPoolRequest(
            destinationPoolName: destinationPoolName, 
            ip: ip
        )
        return try await self.putDedicatedIpInPool(input, logger: logger)
    }

    /// Used to convert a dedicated IP pool to a different scaling mode.   MANAGED pools cannot be converted to STANDARD scaling mode.
    @Sendable
    @inlinable
    public func putDedicatedIpPoolScalingAttributes(_ input: PutDedicatedIpPoolScalingAttributesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> PutDedicatedIpPoolScalingAttributesResponse {
        try await self.client.execute(
            operation: "PutDedicatedIpPoolScalingAttributes", 
            path: "/v2/email/dedicated-ip-pools/{PoolName}/scaling", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Used to convert a dedicated IP pool to a different scaling mode.   MANAGED pools cannot be converted to STANDARD scaling mode.
    ///
    /// Parameters:
    ///   - poolName: The name of the dedicated IP pool.
    ///   - scalingMode: The scaling mode to apply to the dedicated IP pool.  Changing the scaling mode from MANAGED to STANDARD is not supported.
    ///   - logger: Logger use during operation
    @inlinable
    public func putDedicatedIpPoolScalingAttributes(
        poolName: String,
        scalingMode: ScalingMode,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> PutDedicatedIpPoolScalingAttributesResponse {
        let input = PutDedicatedIpPoolScalingAttributesRequest(
            poolName: poolName, 
            scalingMode: scalingMode
        )
        return try await self.putDedicatedIpPoolScalingAttributes(input, logger: logger)
    }

    @Sendable
    @inlinable
    public func putDedicatedIpWarmupAttributes(_ input: PutDedicatedIpWarmupAttributesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> PutDedicatedIpWarmupAttributesResponse {
        try await self.client.execute(
            operation: "PutDedicatedIpWarmupAttributes", 
            path: "/v2/email/dedicated-ips/{Ip}/warmup", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    ///
    /// Parameters:
    ///   - ip: The dedicated IP address that you want to update the warm-up attributes for.
    ///   - warmupPercentage: The warm-up percentage that you want to associate with the dedicated IP address.
    ///   - logger: Logger use during operation
    @inlinable
    public func putDedicatedIpWarmupAttributes(
        ip: String,
        warmupPercentage: Int,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> PutDedicatedIpWarmupAttributesResponse {
        let input = PutDedicatedIpWarmupAttributesRequest(
            ip: ip, 
            warmupPercentage: warmupPercentage
        )
        return try await self.putDedicatedIpWarmupAttributes(input, logger: logger)
    }

    /// Enable or disable the Deliverability dashboard. When you enable the Deliverability dashboard, you gain access to reputation, deliverability, and other metrics for the domains that you use to send email. You also gain the ability to perform predictive inbox placement tests. When you use the Deliverability dashboard, you pay a monthly subscription charge, in addition to any other fees that you accrue by using Amazon SES and other Amazon Web Services services. For more information about the features and cost of a Deliverability dashboard subscription, see Amazon SES Pricing.
    @Sendable
    @inlinable
    public func putDeliverabilityDashboardOption(_ input: PutDeliverabilityDashboardOptionRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> PutDeliverabilityDashboardOptionResponse {
        try await self.client.execute(
            operation: "PutDeliverabilityDashboardOption", 
            path: "/v2/email/deliverability-dashboard", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Enable or disable the Deliverability dashboard. When you enable the Deliverability dashboard, you gain access to reputation, deliverability, and other metrics for the domains that you use to send email. You also gain the ability to perform predictive inbox placement tests. When you use the Deliverability dashboard, you pay a monthly subscription charge, in addition to any other fees that you accrue by using Amazon SES and other Amazon Web Services services. For more information about the features and cost of a Deliverability dashboard subscription, see Amazon SES Pricing.
    ///
    /// Parameters:
    ///   - dashboardEnabled: Specifies whether to enable the Deliverability dashboard. To enable the dashboard, set this value to true.
    ///   - subscribedDomains: An array of objects, one for each verified domain that you use to send email and enabled the Deliverability dashboard for.
    ///   - logger: Logger use during operation
    @inlinable
    public func putDeliverabilityDashboardOption(
        dashboardEnabled: Bool = false,
        subscribedDomains: [DomainDeliverabilityTrackingOption]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> PutDeliverabilityDashboardOptionResponse {
        let input = PutDeliverabilityDashboardOptionRequest(
            dashboardEnabled: dashboardEnabled, 
            subscribedDomains: subscribedDomains
        )
        return try await self.putDeliverabilityDashboardOption(input, logger: logger)
    }

    /// Used to associate a configuration set with an email identity.
    @Sendable
    @inlinable
    public func putEmailIdentityConfigurationSetAttributes(_ input: PutEmailIdentityConfigurationSetAttributesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> PutEmailIdentityConfigurationSetAttributesResponse {
        try await self.client.execute(
            operation: "PutEmailIdentityConfigurationSetAttributes", 
            path: "/v2/email/identities/{EmailIdentity}/configuration-set", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Used to associate a configuration set with an email identity.
    ///
    /// Parameters:
    ///   - configurationSetName: The configuration set to associate with an email identity.
    ///   - emailIdentity: The email address or domain to associate with a configuration set.
    ///   - logger: Logger use during operation
    @inlinable
    public func putEmailIdentityConfigurationSetAttributes(
        configurationSetName: String? = nil,
        emailIdentity: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> PutEmailIdentityConfigurationSetAttributesResponse {
        let input = PutEmailIdentityConfigurationSetAttributesRequest(
            configurationSetName: configurationSetName, 
            emailIdentity: emailIdentity
        )
        return try await self.putEmailIdentityConfigurationSetAttributes(input, logger: logger)
    }

    /// Used to enable or disable DKIM authentication for an email identity.
    @Sendable
    @inlinable
    public func putEmailIdentityDkimAttributes(_ input: PutEmailIdentityDkimAttributesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> PutEmailIdentityDkimAttributesResponse {
        try await self.client.execute(
            operation: "PutEmailIdentityDkimAttributes", 
            path: "/v2/email/identities/{EmailIdentity}/dkim", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Used to enable or disable DKIM authentication for an email identity.
    ///
    /// Parameters:
    ///   - emailIdentity: The email identity.
    ///   - signingEnabled: Sets the DKIM signing configuration for the identity. When you set this value true, then the messages that are sent from the identity are signed using DKIM. If you set this value to false, your messages are sent without DKIM signing.
    ///   - logger: Logger use during operation
    @inlinable
    public func putEmailIdentityDkimAttributes(
        emailIdentity: String,
        signingEnabled: Bool? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> PutEmailIdentityDkimAttributesResponse {
        let input = PutEmailIdentityDkimAttributesRequest(
            emailIdentity: emailIdentity, 
            signingEnabled: signingEnabled
        )
        return try await self.putEmailIdentityDkimAttributes(input, logger: logger)
    }

    /// Used to configure or change the DKIM authentication settings for an email domain identity. You can use this operation to do any of the following:   Update the signing attributes for an identity that uses Bring Your Own DKIM (BYODKIM).   Update the key length that should be used for Easy DKIM.   Change from using no DKIM authentication to using Easy DKIM.   Change from using no DKIM authentication to using BYODKIM.   Change from using Easy DKIM to using BYODKIM.   Change from using BYODKIM to using Easy DKIM.
    @Sendable
    @inlinable
    public func putEmailIdentityDkimSigningAttributes(_ input: PutEmailIdentityDkimSigningAttributesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> PutEmailIdentityDkimSigningAttributesResponse {
        try await self.client.execute(
            operation: "PutEmailIdentityDkimSigningAttributes", 
            path: "/v1/email/identities/{EmailIdentity}/dkim/signing", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Used to configure or change the DKIM authentication settings for an email domain identity. You can use this operation to do any of the following:   Update the signing attributes for an identity that uses Bring Your Own DKIM (BYODKIM).   Update the key length that should be used for Easy DKIM.   Change from using no DKIM authentication to using Easy DKIM.   Change from using no DKIM authentication to using BYODKIM.   Change from using Easy DKIM to using BYODKIM.   Change from using BYODKIM to using Easy DKIM.
    ///
    /// Parameters:
    ///   - emailIdentity: The email identity.
    ///   - signingAttributes: An object that contains information about the private key and selector that you want to use to configure DKIM for the identity for Bring Your Own DKIM (BYODKIM) for the identity, or, configures the key length to be used for Easy DKIM.
    ///   - signingAttributesOrigin: The method to use to configure DKIM for the identity. There are the following possible values:    AWS_SES – Configure DKIM for the identity by using Easy DKIM.    EXTERNAL – Configure DKIM for the identity by using Bring Your Own DKIM (BYODKIM).
    ///   - logger: Logger use during operation
    @inlinable
    public func putEmailIdentityDkimSigningAttributes(
        emailIdentity: String,
        signingAttributes: DkimSigningAttributes? = nil,
        signingAttributesOrigin: DkimSigningAttributesOrigin,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> PutEmailIdentityDkimSigningAttributesResponse {
        let input = PutEmailIdentityDkimSigningAttributesRequest(
            emailIdentity: emailIdentity, 
            signingAttributes: signingAttributes, 
            signingAttributesOrigin: signingAttributesOrigin
        )
        return try await self.putEmailIdentityDkimSigningAttributes(input, logger: logger)
    }

    /// Used to enable or disable feedback forwarding for an identity. This setting determines what happens when an identity is used to send an email that results in a bounce or complaint event. If the value is true, you receive email notifications when bounce or complaint events occur. These notifications are sent to the address that you specified in the Return-Path header of the original email. You're required to have a method of tracking bounces and complaints. If you haven't set up another mechanism for receiving bounce or complaint notifications (for example, by setting up an event destination), you receive an email notification when these events occur (even if this setting is disabled).
    @Sendable
    @inlinable
    public func putEmailIdentityFeedbackAttributes(_ input: PutEmailIdentityFeedbackAttributesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> PutEmailIdentityFeedbackAttributesResponse {
        try await self.client.execute(
            operation: "PutEmailIdentityFeedbackAttributes", 
            path: "/v2/email/identities/{EmailIdentity}/feedback", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Used to enable or disable feedback forwarding for an identity. This setting determines what happens when an identity is used to send an email that results in a bounce or complaint event. If the value is true, you receive email notifications when bounce or complaint events occur. These notifications are sent to the address that you specified in the Return-Path header of the original email. You're required to have a method of tracking bounces and complaints. If you haven't set up another mechanism for receiving bounce or complaint notifications (for example, by setting up an event destination), you receive an email notification when these events occur (even if this setting is disabled).
    ///
    /// Parameters:
    ///   - emailForwardingEnabled: Sets the feedback forwarding configuration for the identity. If the value is true, you receive email notifications when bounce or complaint events occur. These notifications are sent to the address that you specified in the Return-Path header of the original email. You're required to have a method of tracking bounces and complaints. If you haven't set up another mechanism for receiving bounce or complaint notifications (for example, by setting up an event destination), you receive an email notification when these events occur (even if this setting is disabled).
    ///   - emailIdentity: The email identity.
    ///   - logger: Logger use during operation
    @inlinable
    public func putEmailIdentityFeedbackAttributes(
        emailForwardingEnabled: Bool? = nil,
        emailIdentity: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> PutEmailIdentityFeedbackAttributesResponse {
        let input = PutEmailIdentityFeedbackAttributesRequest(
            emailForwardingEnabled: emailForwardingEnabled, 
            emailIdentity: emailIdentity
        )
        return try await self.putEmailIdentityFeedbackAttributes(input, logger: logger)
    }

    /// Used to enable or disable the custom Mail-From domain configuration for an email identity.
    @Sendable
    @inlinable
    public func putEmailIdentityMailFromAttributes(_ input: PutEmailIdentityMailFromAttributesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> PutEmailIdentityMailFromAttributesResponse {
        try await self.client.execute(
            operation: "PutEmailIdentityMailFromAttributes", 
            path: "/v2/email/identities/{EmailIdentity}/mail-from", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Used to enable or disable the custom Mail-From domain configuration for an email identity.
    ///
    /// Parameters:
    ///   - behaviorOnMxFailure: The action to take if the required MX record isn't found when you send an email. When you set this value to UseDefaultValue, the mail is sent using amazonses.com as the MAIL FROM domain. When you set this value to RejectMessage, the Amazon SES API v2 returns a MailFromDomainNotVerified error, and doesn't attempt to deliver the email. These behaviors are taken when the custom MAIL FROM domain configuration is in the Pending, Failed, and TemporaryFailure states.
    ///   - emailIdentity: The verified email identity.
    ///   - mailFromDomain:  The custom MAIL FROM domain that you want the verified identity to use. The MAIL FROM domain must meet the following criteria:   It has to be a subdomain of the verified identity.   It can't be used to receive email.   It can't be used in a "From" address if the MAIL FROM domain is a destination for feedback forwarding emails.
    ///   - logger: Logger use during operation
    @inlinable
    public func putEmailIdentityMailFromAttributes(
        behaviorOnMxFailure: BehaviorOnMxFailure? = nil,
        emailIdentity: String,
        mailFromDomain: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> PutEmailIdentityMailFromAttributesResponse {
        let input = PutEmailIdentityMailFromAttributesRequest(
            behaviorOnMxFailure: behaviorOnMxFailure, 
            emailIdentity: emailIdentity, 
            mailFromDomain: mailFromDomain
        )
        return try await self.putEmailIdentityMailFromAttributes(input, logger: logger)
    }

    /// Adds an email address to the suppression list for your account.
    @Sendable
    @inlinable
    public func putSuppressedDestination(_ input: PutSuppressedDestinationRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> PutSuppressedDestinationResponse {
        try await self.client.execute(
            operation: "PutSuppressedDestination", 
            path: "/v2/email/suppression/addresses", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Adds an email address to the suppression list for your account.
    ///
    /// Parameters:
    ///   - emailAddress: The email address that should be added to the suppression list for your account.
    ///   - reason: The factors that should cause the email address to be added to the suppression list for your account.
    ///   - logger: Logger use during operation
    @inlinable
    public func putSuppressedDestination(
        emailAddress: String,
        reason: SuppressionListReason,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> PutSuppressedDestinationResponse {
        let input = PutSuppressedDestinationRequest(
            emailAddress: emailAddress, 
            reason: reason
        )
        return try await self.putSuppressedDestination(input, logger: logger)
    }

    /// Composes an email message to multiple destinations.
    @Sendable
    @inlinable
    public func sendBulkEmail(_ input: SendBulkEmailRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> SendBulkEmailResponse {
        try await self.client.execute(
            operation: "SendBulkEmail", 
            path: "/v2/email/outbound-bulk-emails", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Composes an email message to multiple destinations.
    ///
    /// Parameters:
    ///   - bulkEmailEntries: The list of bulk email entry objects.
    ///   - configurationSetName: The name of the configuration set to use when sending the email.
    ///   - defaultContent: An object that contains the body of the message. You can specify a template message.
    ///   - defaultEmailTags: A list of tags, in the form of name/value pairs, to apply to an email that you send using the SendEmail operation. Tags correspond to characteristics of the email that you define, so that you can publish email sending events.
    ///   - endpointId: The ID of the multi-region endpoint (global-endpoint).
    ///   - feedbackForwardingEmailAddress: The address that you want bounce and complaint notifications to be sent to.
    ///   - feedbackForwardingEmailAddressIdentityArn: This parameter is used only for sending authorization. It is the ARN of the identity that is associated with the sending authorization policy that permits you to use the email address specified in the FeedbackForwardingEmailAddress parameter. For example, if the owner of example.com (which has ARN arn:aws:ses:us-east-1:123456789012:identity/example.com) attaches a policy to it that authorizes you to use feedback@example.com, then you would specify the FeedbackForwardingEmailAddressIdentityArn to be arn:aws:ses:us-east-1:123456789012:identity/example.com, and the FeedbackForwardingEmailAddress to be feedback@example.com. For more information about sending authorization, see the Amazon SES Developer Guide.
    ///   - fromEmailAddress: The email address to use as the "From" address for the email. The address that you specify has to be verified.
    ///   - fromEmailAddressIdentityArn: This parameter is used only for sending authorization. It is the ARN of the identity that is associated with the sending authorization policy that permits you to use the email address specified in the FromEmailAddress parameter. For example, if the owner of example.com (which has ARN arn:aws:ses:us-east-1:123456789012:identity/example.com) attaches a policy to it that authorizes you to use sender@example.com, then you would specify the FromEmailAddressIdentityArn to be arn:aws:ses:us-east-1:123456789012:identity/example.com, and the FromEmailAddress to be sender@example.com. For more information about sending authorization, see the Amazon SES Developer Guide.
    ///   - replyToAddresses: The "Reply-to" email addresses for the message. When the recipient replies to the message, each Reply-to address receives the reply.
    ///   - logger: Logger use during operation
    @inlinable
    public func sendBulkEmail(
        bulkEmailEntries: [BulkEmailEntry],
        configurationSetName: String? = nil,
        defaultContent: BulkEmailContent,
        defaultEmailTags: [MessageTag]? = nil,
        endpointId: String? = nil,
        feedbackForwardingEmailAddress: String? = nil,
        feedbackForwardingEmailAddressIdentityArn: String? = nil,
        fromEmailAddress: String? = nil,
        fromEmailAddressIdentityArn: String? = nil,
        replyToAddresses: [String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> SendBulkEmailResponse {
        let input = SendBulkEmailRequest(
            bulkEmailEntries: bulkEmailEntries, 
            configurationSetName: configurationSetName, 
            defaultContent: defaultContent, 
            defaultEmailTags: defaultEmailTags, 
            endpointId: endpointId, 
            feedbackForwardingEmailAddress: feedbackForwardingEmailAddress, 
            feedbackForwardingEmailAddressIdentityArn: feedbackForwardingEmailAddressIdentityArn, 
            fromEmailAddress: fromEmailAddress, 
            fromEmailAddressIdentityArn: fromEmailAddressIdentityArn, 
            replyToAddresses: replyToAddresses
        )
        return try await self.sendBulkEmail(input, logger: logger)
    }

    /// Adds an email address to the list of identities for your Amazon SES account in the current Amazon Web Services Region and attempts to verify it. As a result of executing this operation, a customized verification email is sent to the specified address. To use this operation, you must first create a custom verification email template. For more information about creating and using custom verification email templates, see Using custom verification email templates in the Amazon SES Developer Guide. You can execute this operation no more than once per second.
    @Sendable
    @inlinable
    public func sendCustomVerificationEmail(_ input: SendCustomVerificationEmailRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> SendCustomVerificationEmailResponse {
        try await self.client.execute(
            operation: "SendCustomVerificationEmail", 
            path: "/v2/email/outbound-custom-verification-emails", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Adds an email address to the list of identities for your Amazon SES account in the current Amazon Web Services Region and attempts to verify it. As a result of executing this operation, a customized verification email is sent to the specified address. To use this operation, you must first create a custom verification email template. For more information about creating and using custom verification email templates, see Using custom verification email templates in the Amazon SES Developer Guide. You can execute this operation no more than once per second.
    ///
    /// Parameters:
    ///   - configurationSetName: Name of a configuration set to use when sending the verification email.
    ///   - emailAddress: The email address to verify.
    ///   - templateName: The name of the custom verification email template to use when sending the verification email.
    ///   - logger: Logger use during operation
    @inlinable
    public func sendCustomVerificationEmail(
        configurationSetName: String? = nil,
        emailAddress: String,
        templateName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> SendCustomVerificationEmailResponse {
        let input = SendCustomVerificationEmailRequest(
            configurationSetName: configurationSetName, 
            emailAddress: emailAddress, 
            templateName: templateName
        )
        return try await self.sendCustomVerificationEmail(input, logger: logger)
    }

    /// Sends an email message. You can use the Amazon SES API v2 to send the following types of messages:    Simple – A standard email message. When you create this type of message, you specify the sender, the recipient, and the message body, and Amazon SES assembles the message for you.    Raw – A raw, MIME-formatted email message. When you send this type of email, you have to specify all of the message headers, as well as the message body. You can use this message type to send messages that contain attachments. The message that you specify has to be a valid MIME message.    Templated – A message that contains personalization tags. When you send this type of email, Amazon SES API v2 automatically replaces the tags with values that you specify.
    @Sendable
    @inlinable
    public func sendEmail(_ input: SendEmailRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> SendEmailResponse {
        try await self.client.execute(
            operation: "SendEmail", 
            path: "/v2/email/outbound-emails", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Sends an email message. You can use the Amazon SES API v2 to send the following types of messages:    Simple – A standard email message. When you create this type of message, you specify the sender, the recipient, and the message body, and Amazon SES assembles the message for you.    Raw – A raw, MIME-formatted email message. When you send this type of email, you have to specify all of the message headers, as well as the message body. You can use this message type to send messages that contain attachments. The message that you specify has to be a valid MIME message.    Templated – A message that contains personalization tags. When you send this type of email, Amazon SES API v2 automatically replaces the tags with values that you specify.
    ///
    /// Parameters:
    ///   - configurationSetName: The name of the configuration set to use when sending the email.
    ///   - content: An object that contains the body of the message. You can send either a Simple message, Raw message, or a Templated message.
    ///   - destination: An object that contains the recipients of the email message.
    ///   - emailTags: A list of tags, in the form of name/value pairs, to apply to an email that you send using the SendEmail operation. Tags correspond to characteristics of the email that you define, so that you can publish email sending events.
    ///   - endpointId: The ID of the multi-region endpoint (global-endpoint).
    ///   - feedbackForwardingEmailAddress: The address that you want bounce and complaint notifications to be sent to.
    ///   - feedbackForwardingEmailAddressIdentityArn: This parameter is used only for sending authorization. It is the ARN of the identity that is associated with the sending authorization policy that permits you to use the email address specified in the FeedbackForwardingEmailAddress parameter. For example, if the owner of example.com (which has ARN arn:aws:ses:us-east-1:123456789012:identity/example.com) attaches a policy to it that authorizes you to use feedback@example.com, then you would specify the FeedbackForwardingEmailAddressIdentityArn to be arn:aws:ses:us-east-1:123456789012:identity/example.com, and the FeedbackForwardingEmailAddress to be feedback@example.com. For more information about sending authorization, see the Amazon SES Developer Guide.
    ///   - fromEmailAddress: The email address to use as the "From" address for the email. The address that you specify has to be verified.
    ///   - fromEmailAddressIdentityArn: This parameter is used only for sending authorization. It is the ARN of the identity that is associated with the sending authorization policy that permits you to use the email address specified in the FromEmailAddress parameter. For example, if the owner of example.com (which has ARN arn:aws:ses:us-east-1:123456789012:identity/example.com) attaches a policy to it that authorizes you to use sender@example.com, then you would specify the FromEmailAddressIdentityArn to be arn:aws:ses:us-east-1:123456789012:identity/example.com, and the FromEmailAddress to be sender@example.com. For more information about sending authorization, see the Amazon SES Developer Guide. For Raw emails, the FromEmailAddressIdentityArn value overrides the X-SES-SOURCE-ARN and X-SES-FROM-ARN headers specified in raw email message content.
    ///   - listManagementOptions: An object used to specify a list or topic to which an email belongs, which will be used when a contact chooses to unsubscribe.
    ///   - replyToAddresses: The "Reply-to" email addresses for the message. When the recipient replies to the message, each Reply-to address receives the reply.
    ///   - logger: Logger use during operation
    @inlinable
    public func sendEmail(
        configurationSetName: String? = nil,
        content: EmailContent,
        destination: Destination? = nil,
        emailTags: [MessageTag]? = nil,
        endpointId: String? = nil,
        feedbackForwardingEmailAddress: String? = nil,
        feedbackForwardingEmailAddressIdentityArn: String? = nil,
        fromEmailAddress: String? = nil,
        fromEmailAddressIdentityArn: String? = nil,
        listManagementOptions: ListManagementOptions? = nil,
        replyToAddresses: [String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> SendEmailResponse {
        let input = SendEmailRequest(
            configurationSetName: configurationSetName, 
            content: content, 
            destination: destination, 
            emailTags: emailTags, 
            endpointId: endpointId, 
            feedbackForwardingEmailAddress: feedbackForwardingEmailAddress, 
            feedbackForwardingEmailAddressIdentityArn: feedbackForwardingEmailAddressIdentityArn, 
            fromEmailAddress: fromEmailAddress, 
            fromEmailAddressIdentityArn: fromEmailAddressIdentityArn, 
            listManagementOptions: listManagementOptions, 
            replyToAddresses: replyToAddresses
        )
        return try await self.sendEmail(input, logger: logger)
    }

    /// Add one or more tags (keys and values) to a specified resource. A tag is a label that you optionally define and associate with a resource. Tags can help you categorize and manage resources in different ways, such as by purpose, owner, environment, or other criteria. A resource can have as many as 50 tags. Each tag consists of a required tag key and an associated tag value, both of which you define. A tag key is a general label that acts as a category for more specific tag values. A tag value acts as a descriptor within a tag key.
    @Sendable
    @inlinable
    public func tagResource(_ input: TagResourceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> TagResourceResponse {
        try await self.client.execute(
            operation: "TagResource", 
            path: "/v2/email/tags", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Add one or more tags (keys and values) to a specified resource. A tag is a label that you optionally define and associate with a resource. Tags can help you categorize and manage resources in different ways, such as by purpose, owner, environment, or other criteria. A resource can have as many as 50 tags. Each tag consists of a required tag key and an associated tag value, both of which you define. A tag key is a general label that acts as a category for more specific tag values. A tag value acts as a descriptor within a tag key.
    ///
    /// Parameters:
    ///   - resourceArn: The Amazon Resource Name (ARN) of the resource that you want to add one or more tags to.
    ///   - tags: A list of the tags that you want to add to the resource. A tag consists of a required tag key (Key) and an associated tag value (Value). The maximum length of a tag key is 128 characters. The maximum length of a tag value is 256 characters.
    ///   - logger: Logger use during operation
    @inlinable
    public func tagResource(
        resourceArn: String,
        tags: [Tag],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> TagResourceResponse {
        let input = TagResourceRequest(
            resourceArn: resourceArn, 
            tags: tags
        )
        return try await self.tagResource(input, logger: logger)
    }

    /// Creates a preview of the MIME content of an email when provided with a template and a set of replacement data. You can execute this operation no more than once per second.
    @Sendable
    @inlinable
    public func testRenderEmailTemplate(_ input: TestRenderEmailTemplateRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> TestRenderEmailTemplateResponse {
        try await self.client.execute(
            operation: "TestRenderEmailTemplate", 
            path: "/v2/email/templates/{TemplateName}/render", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a preview of the MIME content of an email when provided with a template and a set of replacement data. You can execute this operation no more than once per second.
    ///
    /// Parameters:
    ///   - templateData: A list of replacement values to apply to the template. This parameter is a JSON object, typically consisting of key-value pairs in which the keys correspond to replacement tags in the email template.
    ///   - templateName: The name of the template.
    ///   - logger: Logger use during operation
    @inlinable
    public func testRenderEmailTemplate(
        templateData: String,
        templateName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> TestRenderEmailTemplateResponse {
        let input = TestRenderEmailTemplateRequest(
            templateData: templateData, 
            templateName: templateName
        )
        return try await self.testRenderEmailTemplate(input, logger: logger)
    }

    /// Remove one or more tags (keys and values) from a specified resource.
    @Sendable
    @inlinable
    public func untagResource(_ input: UntagResourceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UntagResourceResponse {
        try await self.client.execute(
            operation: "UntagResource", 
            path: "/v2/email/tags", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Remove one or more tags (keys and values) from a specified resource.
    ///
    /// Parameters:
    ///   - resourceArn: The Amazon Resource Name (ARN) of the resource that you want to remove one or more tags from.
    ///   - tagKeys: The tags (tag keys) that you want to remove from the resource. When you specify a tag key, the action removes both that key and its associated tag value. To remove more than one tag from the resource, append the TagKeys parameter and argument for each additional tag to remove, separated by an ampersand. For example: /v2/email/tags?ResourceArn=ResourceArn&TagKeys=Key1&TagKeys=Key2
    ///   - logger: Logger use during operation
    @inlinable
    public func untagResource(
        resourceArn: String,
        tagKeys: [String],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UntagResourceResponse {
        let input = UntagResourceRequest(
            resourceArn: resourceArn, 
            tagKeys: tagKeys
        )
        return try await self.untagResource(input, logger: logger)
    }

    /// Update the configuration of an event destination for a configuration set.  Events include message sends, deliveries, opens, clicks, bounces, and complaints. Event destinations are places that you can send information about these events to. For example, you can send event data to Amazon EventBridge and associate a rule to send the event to the specified target.
    @Sendable
    @inlinable
    public func updateConfigurationSetEventDestination(_ input: UpdateConfigurationSetEventDestinationRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateConfigurationSetEventDestinationResponse {
        try await self.client.execute(
            operation: "UpdateConfigurationSetEventDestination", 
            path: "/v2/email/configuration-sets/{ConfigurationSetName}/event-destinations/{EventDestinationName}", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Update the configuration of an event destination for a configuration set.  Events include message sends, deliveries, opens, clicks, bounces, and complaints. Event destinations are places that you can send information about these events to. For example, you can send event data to Amazon EventBridge and associate a rule to send the event to the specified target.
    ///
    /// Parameters:
    ///   - configurationSetName: The name of the configuration set that contains the event destination to modify.
    ///   - eventDestination: An object that defines the event destination.
    ///   - eventDestinationName: The name of the event destination.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateConfigurationSetEventDestination(
        configurationSetName: String,
        eventDestination: EventDestinationDefinition,
        eventDestinationName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateConfigurationSetEventDestinationResponse {
        let input = UpdateConfigurationSetEventDestinationRequest(
            configurationSetName: configurationSetName, 
            eventDestination: eventDestination, 
            eventDestinationName: eventDestinationName
        )
        return try await self.updateConfigurationSetEventDestination(input, logger: logger)
    }

    /// Updates a contact's preferences for a list.  You must specify all existing topic preferences in the TopicPreferences object, not just the ones that need updating; otherwise, all your existing preferences will be removed.
    @Sendable
    @inlinable
    public func updateContact(_ input: UpdateContactRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateContactResponse {
        try await self.client.execute(
            operation: "UpdateContact", 
            path: "/v2/email/contact-lists/{ContactListName}/contacts/{EmailAddress}", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates a contact's preferences for a list.  You must specify all existing topic preferences in the TopicPreferences object, not just the ones that need updating; otherwise, all your existing preferences will be removed.
    ///
    /// Parameters:
    ///   - attributesData: The attribute data attached to a contact.
    ///   - contactListName: The name of the contact list.
    ///   - emailAddress: The contact's email address.
    ///   - topicPreferences: The contact's preference for being opted-in to or opted-out of a topic.
    ///   - unsubscribeAll: A boolean value status noting if the contact is unsubscribed from all contact list topics.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateContact(
        attributesData: String? = nil,
        contactListName: String,
        emailAddress: String,
        topicPreferences: [TopicPreference]? = nil,
        unsubscribeAll: Bool? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateContactResponse {
        let input = UpdateContactRequest(
            attributesData: attributesData, 
            contactListName: contactListName, 
            emailAddress: emailAddress, 
            topicPreferences: topicPreferences, 
            unsubscribeAll: unsubscribeAll
        )
        return try await self.updateContact(input, logger: logger)
    }

    /// Updates contact list metadata. This operation does a complete replacement.
    @Sendable
    @inlinable
    public func updateContactList(_ input: UpdateContactListRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateContactListResponse {
        try await self.client.execute(
            operation: "UpdateContactList", 
            path: "/v2/email/contact-lists/{ContactListName}", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates contact list metadata. This operation does a complete replacement.
    ///
    /// Parameters:
    ///   - contactListName: The name of the contact list.
    ///   - description: A description of what the contact list is about.
    ///   - topics: An interest group, theme, or label within a list. A contact list can have multiple topics.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateContactList(
        contactListName: String,
        description: String? = nil,
        topics: [Topic]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateContactListResponse {
        let input = UpdateContactListRequest(
            contactListName: contactListName, 
            description: description, 
            topics: topics
        )
        return try await self.updateContactList(input, logger: logger)
    }

    /// Updates an existing custom verification email template. For more information about custom verification email templates, see Using custom verification email templates in the Amazon SES Developer Guide. You can execute this operation no more than once per second.
    @Sendable
    @inlinable
    public func updateCustomVerificationEmailTemplate(_ input: UpdateCustomVerificationEmailTemplateRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateCustomVerificationEmailTemplateResponse {
        try await self.client.execute(
            operation: "UpdateCustomVerificationEmailTemplate", 
            path: "/v2/email/custom-verification-email-templates/{TemplateName}", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates an existing custom verification email template. For more information about custom verification email templates, see Using custom verification email templates in the Amazon SES Developer Guide. You can execute this operation no more than once per second.
    ///
    /// Parameters:
    ///   - failureRedirectionURL: The URL that the recipient of the verification email is sent to if his or her address is not successfully verified.
    ///   - fromEmailAddress: The email address that the custom verification email is sent from.
    ///   - successRedirectionURL: The URL that the recipient of the verification email is sent to if his or her address is successfully verified.
    ///   - templateContent: The content of the custom verification email. The total size of the email must be less than 10 MB. The message body may contain HTML, with some limitations. For more information, see Custom verification email frequently asked questions in the Amazon SES Developer Guide.
    ///   - templateName: The name of the custom verification email template that you want to update.
    ///   - templateSubject: The subject line of the custom verification email.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateCustomVerificationEmailTemplate(
        failureRedirectionURL: String,
        fromEmailAddress: String,
        successRedirectionURL: String,
        templateContent: String,
        templateName: String,
        templateSubject: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateCustomVerificationEmailTemplateResponse {
        let input = UpdateCustomVerificationEmailTemplateRequest(
            failureRedirectionURL: failureRedirectionURL, 
            fromEmailAddress: fromEmailAddress, 
            successRedirectionURL: successRedirectionURL, 
            templateContent: templateContent, 
            templateName: templateName, 
            templateSubject: templateSubject
        )
        return try await self.updateCustomVerificationEmailTemplate(input, logger: logger)
    }

    /// Updates the specified sending authorization policy for the given identity (an email address or a domain). This API returns successfully even if a policy with the specified name does not exist.  This API is for the identity owner only. If you have not verified the identity, this API will return an error.  Sending authorization is a feature that enables an identity owner to authorize other senders to use its identities. For information about using sending authorization, see the Amazon SES Developer Guide. You can execute this operation no more than once per second.
    @Sendable
    @inlinable
    public func updateEmailIdentityPolicy(_ input: UpdateEmailIdentityPolicyRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateEmailIdentityPolicyResponse {
        try await self.client.execute(
            operation: "UpdateEmailIdentityPolicy", 
            path: "/v2/email/identities/{EmailIdentity}/policies/{PolicyName}", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates the specified sending authorization policy for the given identity (an email address or a domain). This API returns successfully even if a policy with the specified name does not exist.  This API is for the identity owner only. If you have not verified the identity, this API will return an error.  Sending authorization is a feature that enables an identity owner to authorize other senders to use its identities. For information about using sending authorization, see the Amazon SES Developer Guide. You can execute this operation no more than once per second.
    ///
    /// Parameters:
    ///   - emailIdentity: The email identity.
    ///   - policy: The text of the policy in JSON format. The policy cannot exceed 4 KB. For information about the syntax of sending authorization policies, see the Amazon SES Developer Guide.
    ///   - policyName: The name of the policy. The policy name cannot exceed 64 characters and can only include alphanumeric characters, dashes, and underscores.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateEmailIdentityPolicy(
        emailIdentity: String,
        policy: String,
        policyName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateEmailIdentityPolicyResponse {
        let input = UpdateEmailIdentityPolicyRequest(
            emailIdentity: emailIdentity, 
            policy: policy, 
            policyName: policyName
        )
        return try await self.updateEmailIdentityPolicy(input, logger: logger)
    }

    /// Updates an email template. Email templates enable you to send personalized email to one or more destinations in a single API operation. For more information, see the Amazon SES Developer Guide. You can execute this operation no more than once per second.
    @Sendable
    @inlinable
    public func updateEmailTemplate(_ input: UpdateEmailTemplateRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateEmailTemplateResponse {
        try await self.client.execute(
            operation: "UpdateEmailTemplate", 
            path: "/v2/email/templates/{TemplateName}", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates an email template. Email templates enable you to send personalized email to one or more destinations in a single API operation. For more information, see the Amazon SES Developer Guide. You can execute this operation no more than once per second.
    ///
    /// Parameters:
    ///   - templateContent: The content of the email template, composed of a subject line, an HTML part, and a text-only part.
    ///   - templateName: The name of the template.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateEmailTemplate(
        templateContent: EmailTemplateContent,
        templateName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateEmailTemplateResponse {
        let input = UpdateEmailTemplateRequest(
            templateContent: templateContent, 
            templateName: templateName
        )
        return try await self.updateEmailTemplate(input, logger: logger)
    }
}

extension SESv2 {
    /// Initializer required by `AWSService.with(middlewares:timeout:byteBufferAllocator:options)`. You are not able to use this initializer directly as there are not public
    /// initializers for `AWSServiceConfig.Patch`. Please use `AWSService.with(middlewares:timeout:byteBufferAllocator:options)` instead.
    public init(from: SESv2, patch: AWSServiceConfig.Patch) {
        self.client = from.client
        self.config = from.config.with(patch: patch)
    }
}

// MARK: Paginators

@available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *)
extension SESv2 {
    /// Return PaginatorSequence for operation ``getDedicatedIps(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func getDedicatedIpsPaginator(
        _ input: GetDedicatedIpsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<GetDedicatedIpsRequest, GetDedicatedIpsResponse> {
        return .init(
            input: input,
            command: self.getDedicatedIps,
            inputKey: \GetDedicatedIpsRequest.nextToken,
            outputKey: \GetDedicatedIpsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``getDedicatedIps(_:logger:)``.
    ///
    /// - Parameters:
    ///   - pageSize: The number of results to show in a single call to GetDedicatedIpsRequest. If the number of results is larger than the number you specified in this parameter, then the response includes a NextToken element, which you can use to obtain additional results.
    ///   - poolName: The name of the IP pool that the dedicated IP address is associated with.
    ///   - logger: Logger used for logging
    @inlinable
    public func getDedicatedIpsPaginator(
        pageSize: Int? = nil,
        poolName: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<GetDedicatedIpsRequest, GetDedicatedIpsResponse> {
        let input = GetDedicatedIpsRequest(
            pageSize: pageSize, 
            poolName: poolName
        )
        return self.getDedicatedIpsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listConfigurationSets(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listConfigurationSetsPaginator(
        _ input: ListConfigurationSetsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListConfigurationSetsRequest, ListConfigurationSetsResponse> {
        return .init(
            input: input,
            command: self.listConfigurationSets,
            inputKey: \ListConfigurationSetsRequest.nextToken,
            outputKey: \ListConfigurationSetsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listConfigurationSets(_:logger:)``.
    ///
    /// - Parameters:
    ///   - pageSize: The number of results to show in a single call to ListConfigurationSets. If the number of results is larger than the number you specified in this parameter, then the response includes a NextToken element, which you can use to obtain additional results.
    ///   - logger: Logger used for logging
    @inlinable
    public func listConfigurationSetsPaginator(
        pageSize: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListConfigurationSetsRequest, ListConfigurationSetsResponse> {
        let input = ListConfigurationSetsRequest(
            pageSize: pageSize
        )
        return self.listConfigurationSetsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listContactLists(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listContactListsPaginator(
        _ input: ListContactListsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListContactListsRequest, ListContactListsResponse> {
        return .init(
            input: input,
            command: self.listContactLists,
            inputKey: \ListContactListsRequest.nextToken,
            outputKey: \ListContactListsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listContactLists(_:logger:)``.
    ///
    /// - Parameters:
    ///   - pageSize: Maximum number of contact lists to return at once. Use this parameter to paginate results. If additional contact lists exist beyond the specified limit, the NextToken element is sent in the response. Use the NextToken value in subsequent requests to retrieve additional lists.
    ///   - logger: Logger used for logging
    @inlinable
    public func listContactListsPaginator(
        pageSize: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListContactListsRequest, ListContactListsResponse> {
        let input = ListContactListsRequest(
            pageSize: pageSize
        )
        return self.listContactListsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listContacts(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listContactsPaginator(
        _ input: ListContactsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListContactsRequest, ListContactsResponse> {
        return .init(
            input: input,
            command: self.listContacts,
            inputKey: \ListContactsRequest.nextToken,
            outputKey: \ListContactsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listContacts(_:logger:)``.
    ///
    /// - Parameters:
    ///   - contactListName: The name of the contact list.
    ///   - filter: A filter that can be applied to a list of contacts.
    ///   - pageSize: The number of contacts that may be returned at once, which is dependent on if there are more or less contacts than the value of the PageSize. Use this parameter to paginate results. If additional contacts exist beyond the specified limit, the NextToken element is sent in the response. Use the NextToken value in subsequent requests to retrieve additional contacts.
    ///   - logger: Logger used for logging
    @inlinable
    public func listContactsPaginator(
        contactListName: String,
        filter: ListContactsFilter? = nil,
        pageSize: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListContactsRequest, ListContactsResponse> {
        let input = ListContactsRequest(
            contactListName: contactListName, 
            filter: filter, 
            pageSize: pageSize
        )
        return self.listContactsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listCustomVerificationEmailTemplates(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listCustomVerificationEmailTemplatesPaginator(
        _ input: ListCustomVerificationEmailTemplatesRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListCustomVerificationEmailTemplatesRequest, ListCustomVerificationEmailTemplatesResponse> {
        return .init(
            input: input,
            command: self.listCustomVerificationEmailTemplates,
            inputKey: \ListCustomVerificationEmailTemplatesRequest.nextToken,
            outputKey: \ListCustomVerificationEmailTemplatesResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listCustomVerificationEmailTemplates(_:logger:)``.
    ///
    /// - Parameters:
    ///   - pageSize: The number of results to show in a single call to ListCustomVerificationEmailTemplates. If the number of results is larger than the number you specified in this parameter, then the response includes a NextToken element, which you can use to obtain additional results. The value you specify has to be at least 1, and can be no more than 50.
    ///   - logger: Logger used for logging
    @inlinable
    public func listCustomVerificationEmailTemplatesPaginator(
        pageSize: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListCustomVerificationEmailTemplatesRequest, ListCustomVerificationEmailTemplatesResponse> {
        let input = ListCustomVerificationEmailTemplatesRequest(
            pageSize: pageSize
        )
        return self.listCustomVerificationEmailTemplatesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listDedicatedIpPools(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listDedicatedIpPoolsPaginator(
        _ input: ListDedicatedIpPoolsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListDedicatedIpPoolsRequest, ListDedicatedIpPoolsResponse> {
        return .init(
            input: input,
            command: self.listDedicatedIpPools,
            inputKey: \ListDedicatedIpPoolsRequest.nextToken,
            outputKey: \ListDedicatedIpPoolsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listDedicatedIpPools(_:logger:)``.
    ///
    /// - Parameters:
    ///   - pageSize: The number of results to show in a single call to ListDedicatedIpPools. If the number of results is larger than the number you specified in this parameter, then the response includes a NextToken element, which you can use to obtain additional results.
    ///   - logger: Logger used for logging
    @inlinable
    public func listDedicatedIpPoolsPaginator(
        pageSize: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListDedicatedIpPoolsRequest, ListDedicatedIpPoolsResponse> {
        let input = ListDedicatedIpPoolsRequest(
            pageSize: pageSize
        )
        return self.listDedicatedIpPoolsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listDeliverabilityTestReports(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listDeliverabilityTestReportsPaginator(
        _ input: ListDeliverabilityTestReportsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListDeliverabilityTestReportsRequest, ListDeliverabilityTestReportsResponse> {
        return .init(
            input: input,
            command: self.listDeliverabilityTestReports,
            inputKey: \ListDeliverabilityTestReportsRequest.nextToken,
            outputKey: \ListDeliverabilityTestReportsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listDeliverabilityTestReports(_:logger:)``.
    ///
    /// - Parameters:
    ///   - pageSize: The number of results to show in a single call to ListDeliverabilityTestReports. If the number of results is larger than the number you specified in this parameter, then the response includes a NextToken element, which you can use to obtain additional results. The value you specify has to be at least 0, and can be no more than 1000.
    ///   - logger: Logger used for logging
    @inlinable
    public func listDeliverabilityTestReportsPaginator(
        pageSize: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListDeliverabilityTestReportsRequest, ListDeliverabilityTestReportsResponse> {
        let input = ListDeliverabilityTestReportsRequest(
            pageSize: pageSize
        )
        return self.listDeliverabilityTestReportsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listDomainDeliverabilityCampaigns(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listDomainDeliverabilityCampaignsPaginator(
        _ input: ListDomainDeliverabilityCampaignsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListDomainDeliverabilityCampaignsRequest, ListDomainDeliverabilityCampaignsResponse> {
        return .init(
            input: input,
            command: self.listDomainDeliverabilityCampaigns,
            inputKey: \ListDomainDeliverabilityCampaignsRequest.nextToken,
            outputKey: \ListDomainDeliverabilityCampaignsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listDomainDeliverabilityCampaigns(_:logger:)``.
    ///
    /// - Parameters:
    ///   - endDate: The last day that you want to obtain deliverability data for. This value has to be less than or equal to 30 days after the value of the StartDate parameter.
    ///   - pageSize: The maximum number of results to include in response to a single call to the ListDomainDeliverabilityCampaigns operation. If the number of results is larger than the number that you specify in this parameter, the response includes a NextToken element, which you can use to obtain additional results.
    ///   - startDate: The first day that you want to obtain deliverability data for.
    ///   - subscribedDomain: The domain to obtain deliverability data for.
    ///   - logger: Logger used for logging
    @inlinable
    public func listDomainDeliverabilityCampaignsPaginator(
        endDate: Date,
        pageSize: Int? = nil,
        startDate: Date,
        subscribedDomain: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListDomainDeliverabilityCampaignsRequest, ListDomainDeliverabilityCampaignsResponse> {
        let input = ListDomainDeliverabilityCampaignsRequest(
            endDate: endDate, 
            pageSize: pageSize, 
            startDate: startDate, 
            subscribedDomain: subscribedDomain
        )
        return self.listDomainDeliverabilityCampaignsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listEmailIdentities(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listEmailIdentitiesPaginator(
        _ input: ListEmailIdentitiesRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListEmailIdentitiesRequest, ListEmailIdentitiesResponse> {
        return .init(
            input: input,
            command: self.listEmailIdentities,
            inputKey: \ListEmailIdentitiesRequest.nextToken,
            outputKey: \ListEmailIdentitiesResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listEmailIdentities(_:logger:)``.
    ///
    /// - Parameters:
    ///   - pageSize: The number of results to show in a single call to ListEmailIdentities. If the number of results is larger than the number you specified in this parameter, then the response includes a NextToken element, which you can use to obtain additional results. The value you specify has to be at least 0, and can be no more than 1000.
    ///   - logger: Logger used for logging
    @inlinable
    public func listEmailIdentitiesPaginator(
        pageSize: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListEmailIdentitiesRequest, ListEmailIdentitiesResponse> {
        let input = ListEmailIdentitiesRequest(
            pageSize: pageSize
        )
        return self.listEmailIdentitiesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listEmailTemplates(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listEmailTemplatesPaginator(
        _ input: ListEmailTemplatesRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListEmailTemplatesRequest, ListEmailTemplatesResponse> {
        return .init(
            input: input,
            command: self.listEmailTemplates,
            inputKey: \ListEmailTemplatesRequest.nextToken,
            outputKey: \ListEmailTemplatesResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listEmailTemplates(_:logger:)``.
    ///
    /// - Parameters:
    ///   - pageSize: The number of results to show in a single call to ListEmailTemplates. If the number of results is larger than the number you specified in this parameter, then the response includes a NextToken element, which you can use to obtain additional results. The value you specify has to be at least 1, and can be no more than 100.
    ///   - logger: Logger used for logging
    @inlinable
    public func listEmailTemplatesPaginator(
        pageSize: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListEmailTemplatesRequest, ListEmailTemplatesResponse> {
        let input = ListEmailTemplatesRequest(
            pageSize: pageSize
        )
        return self.listEmailTemplatesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listExportJobs(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listExportJobsPaginator(
        _ input: ListExportJobsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListExportJobsRequest, ListExportJobsResponse> {
        return .init(
            input: input,
            command: self.listExportJobs,
            inputKey: \ListExportJobsRequest.nextToken,
            outputKey: \ListExportJobsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listExportJobs(_:logger:)``.
    ///
    /// - Parameters:
    ///   - exportSourceType: A value used to list export jobs that have a certain ExportSourceType.
    ///   - jobStatus: A value used to list export jobs that have a certain JobStatus.
    ///   - pageSize: Maximum number of export jobs to return at once. Use this parameter to paginate results. If additional export jobs exist beyond the specified limit, the NextToken element is sent in the response. Use the NextToken value in subsequent calls to ListExportJobs to retrieve additional export jobs.
    ///   - logger: Logger used for logging
    @inlinable
    public func listExportJobsPaginator(
        exportSourceType: ExportSourceType? = nil,
        jobStatus: JobStatus? = nil,
        pageSize: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListExportJobsRequest, ListExportJobsResponse> {
        let input = ListExportJobsRequest(
            exportSourceType: exportSourceType, 
            jobStatus: jobStatus, 
            pageSize: pageSize
        )
        return self.listExportJobsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listImportJobs(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listImportJobsPaginator(
        _ input: ListImportJobsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListImportJobsRequest, ListImportJobsResponse> {
        return .init(
            input: input,
            command: self.listImportJobs,
            inputKey: \ListImportJobsRequest.nextToken,
            outputKey: \ListImportJobsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listImportJobs(_:logger:)``.
    ///
    /// - Parameters:
    ///   - importDestinationType: The destination of the import job, which can be used to list import jobs that have a certain ImportDestinationType.
    ///   - pageSize: Maximum number of import jobs to return at once. Use this parameter to paginate results. If additional import jobs exist beyond the specified limit, the NextToken element is sent in the response. Use the NextToken value in subsequent requests to retrieve additional addresses.
    ///   - logger: Logger used for logging
    @inlinable
    public func listImportJobsPaginator(
        importDestinationType: ImportDestinationType? = nil,
        pageSize: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListImportJobsRequest, ListImportJobsResponse> {
        let input = ListImportJobsRequest(
            importDestinationType: importDestinationType, 
            pageSize: pageSize
        )
        return self.listImportJobsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listMultiRegionEndpoints(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listMultiRegionEndpointsPaginator(
        _ input: ListMultiRegionEndpointsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListMultiRegionEndpointsRequest, ListMultiRegionEndpointsResponse> {
        return .init(
            input: input,
            command: self.listMultiRegionEndpoints,
            inputKey: \ListMultiRegionEndpointsRequest.nextToken,
            outputKey: \ListMultiRegionEndpointsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listMultiRegionEndpoints(_:logger:)``.
    ///
    /// - Parameters:
    ///   - pageSize: The number of results to show in a single call to ListMultiRegionEndpoints. If the number of results is larger than the number you specified in this parameter, the response includes a NextToken element that you can use to retrieve the next page of results.
    ///   - logger: Logger used for logging
    @inlinable
    public func listMultiRegionEndpointsPaginator(
        pageSize: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListMultiRegionEndpointsRequest, ListMultiRegionEndpointsResponse> {
        let input = ListMultiRegionEndpointsRequest(
            pageSize: pageSize
        )
        return self.listMultiRegionEndpointsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listRecommendations(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listRecommendationsPaginator(
        _ input: ListRecommendationsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListRecommendationsRequest, ListRecommendationsResponse> {
        return .init(
            input: input,
            command: self.listRecommendations,
            inputKey: \ListRecommendationsRequest.nextToken,
            outputKey: \ListRecommendationsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listRecommendations(_:logger:)``.
    ///
    /// - Parameters:
    ///   - filter: Filters applied when retrieving recommendations. Can eiter be an individual filter, or combinations of STATUS and IMPACT or STATUS and TYPE
    ///   - pageSize: The number of results to show in a single call to ListRecommendations. If the number of results is larger than the number you specified in this parameter, then the response includes a NextToken element, which you can use to obtain additional results. The value you specify has to be at least 1, and can be no more than 100.
    ///   - logger: Logger used for logging
    @inlinable
    public func listRecommendationsPaginator(
        filter: [ListRecommendationsFilterKey: String]? = nil,
        pageSize: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListRecommendationsRequest, ListRecommendationsResponse> {
        let input = ListRecommendationsRequest(
            filter: filter, 
            pageSize: pageSize
        )
        return self.listRecommendationsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listSuppressedDestinations(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listSuppressedDestinationsPaginator(
        _ input: ListSuppressedDestinationsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListSuppressedDestinationsRequest, ListSuppressedDestinationsResponse> {
        return .init(
            input: input,
            command: self.listSuppressedDestinations,
            inputKey: \ListSuppressedDestinationsRequest.nextToken,
            outputKey: \ListSuppressedDestinationsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listSuppressedDestinations(_:logger:)``.
    ///
    /// - Parameters:
    ///   - endDate: Used to filter the list of suppressed email destinations so that it only includes addresses that were added to the list before a specific date.
    ///   - pageSize: The number of results to show in a single call to ListSuppressedDestinations. If the number of results is larger than the number you specified in this parameter, then the response includes a NextToken element, which you can use to obtain additional results.
    ///   - reasons: The factors that caused the email address to be added to .
    ///   - startDate: Used to filter the list of suppressed email destinations so that it only includes addresses that were added to the list after a specific date.
    ///   - logger: Logger used for logging
    @inlinable
    public func listSuppressedDestinationsPaginator(
        endDate: Date? = nil,
        pageSize: Int? = nil,
        reasons: [SuppressionListReason]? = nil,
        startDate: Date? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListSuppressedDestinationsRequest, ListSuppressedDestinationsResponse> {
        let input = ListSuppressedDestinationsRequest(
            endDate: endDate, 
            pageSize: pageSize, 
            reasons: reasons, 
            startDate: startDate
        )
        return self.listSuppressedDestinationsPaginator(input, logger: logger)
    }
}

extension SESv2.GetDedicatedIpsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SESv2.GetDedicatedIpsRequest {
        return .init(
            nextToken: token,
            pageSize: self.pageSize,
            poolName: self.poolName
        )
    }
}

extension SESv2.ListConfigurationSetsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SESv2.ListConfigurationSetsRequest {
        return .init(
            nextToken: token,
            pageSize: self.pageSize
        )
    }
}

extension SESv2.ListContactListsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SESv2.ListContactListsRequest {
        return .init(
            nextToken: token,
            pageSize: self.pageSize
        )
    }
}

extension SESv2.ListContactsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SESv2.ListContactsRequest {
        return .init(
            contactListName: self.contactListName,
            filter: self.filter,
            nextToken: token,
            pageSize: self.pageSize
        )
    }
}

extension SESv2.ListCustomVerificationEmailTemplatesRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SESv2.ListCustomVerificationEmailTemplatesRequest {
        return .init(
            nextToken: token,
            pageSize: self.pageSize
        )
    }
}

extension SESv2.ListDedicatedIpPoolsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SESv2.ListDedicatedIpPoolsRequest {
        return .init(
            nextToken: token,
            pageSize: self.pageSize
        )
    }
}

extension SESv2.ListDeliverabilityTestReportsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SESv2.ListDeliverabilityTestReportsRequest {
        return .init(
            nextToken: token,
            pageSize: self.pageSize
        )
    }
}

extension SESv2.ListDomainDeliverabilityCampaignsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SESv2.ListDomainDeliverabilityCampaignsRequest {
        return .init(
            endDate: self.endDate,
            nextToken: token,
            pageSize: self.pageSize,
            startDate: self.startDate,
            subscribedDomain: self.subscribedDomain
        )
    }
}

extension SESv2.ListEmailIdentitiesRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SESv2.ListEmailIdentitiesRequest {
        return .init(
            nextToken: token,
            pageSize: self.pageSize
        )
    }
}

extension SESv2.ListEmailTemplatesRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SESv2.ListEmailTemplatesRequest {
        return .init(
            nextToken: token,
            pageSize: self.pageSize
        )
    }
}

extension SESv2.ListExportJobsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SESv2.ListExportJobsRequest {
        return .init(
            exportSourceType: self.exportSourceType,
            jobStatus: self.jobStatus,
            nextToken: token,
            pageSize: self.pageSize
        )
    }
}

extension SESv2.ListImportJobsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SESv2.ListImportJobsRequest {
        return .init(
            importDestinationType: self.importDestinationType,
            nextToken: token,
            pageSize: self.pageSize
        )
    }
}

extension SESv2.ListMultiRegionEndpointsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SESv2.ListMultiRegionEndpointsRequest {
        return .init(
            nextToken: token,
            pageSize: self.pageSize
        )
    }
}

extension SESv2.ListRecommendationsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SESv2.ListRecommendationsRequest {
        return .init(
            filter: self.filter,
            nextToken: token,
            pageSize: self.pageSize
        )
    }
}

extension SESv2.ListSuppressedDestinationsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SESv2.ListSuppressedDestinationsRequest {
        return .init(
            endDate: self.endDate,
            nextToken: token,
            pageSize: self.pageSize,
            reasons: self.reasons,
            startDate: self.startDate
        )
    }
}
